@@ -125,10 +125,10 @@ learn_laplacian_gle_admm <- function(S, A_mask = NULL, alpha = 0, rho = 1, maxit
125125 A_mask <- matrix (1 , p , p ) - diag(p )
126126 Sinv <- MASS :: ginv(S )
127127 w <- w_init(" naive" , Sinv )
128- Yk <- L(w )
129- Theta <- Yk
130- Ck <- Yk
131- C <- Ck
128+ Theta <- L(w )
129+ Yk <- Theta
130+ Ck <- Theta
131+ C <- Theta
132132 # ADMM constants
133133 mu <- 2
134134 tau <- 2
@@ -142,11 +142,9 @@ learn_laplacian_gle_admm <- function(S, A_mask = NULL, alpha = 0, rho = 1, maxit
142142 if (record_objective )
143143 fun <- c(vanilla.objective(Theta , K ))
144144 # ADMM loop
145- # P <- qr.Q(qr(rep(1, p)), complete=TRUE)[, 2:p]
146- P <- eigvec_sym(Yk )
147- P <- P [, 2 : p ]
145+ P <- qr.Q(qr(rep(1 , p )), complete = TRUE )[, 2 : p ]
148146 for (k in c(1 : maxiter )) {
149- Gamma <- t(P ) %*% (K + Yk - rho * Ck ) %*% P
147+ Gamma <- t(P ) %*% (( K + Yk ) / rho - Ck ) %*% P
150148 U <- eigvec_sym(Gamma )
151149 lambda <- eigval_sym(Gamma )
152150 d <- .5 * c(sqrt(lambda ^ 2 + 4 / rho ) - lambda )
@@ -159,14 +157,14 @@ learn_laplacian_gle_admm <- function(S, A_mask = NULL, alpha = 0, rho = 1, maxit
159157 Yk <- Yk + rho * Rk
160158 if (record_objective )
161159 fun <- c(fun , vanilla.objective(Thetak , K ))
162- normF_Rk <- norm(Rk , " F" )
163160 has_converged <- norm(Theta - Thetak ) / norm(Theta , " F" ) < reltol
164161 if (has_converged && k > 1 ) break
165- # s <- rho * norm(C - Ck, "F")
166- # if (normF_Rk > mu * s)
167- # rho <- rho * tau
168- # else if (s > mu * normF_Rk)
169- # rho <- rho / tau
162+ s <- rho * norm(C - Ck , " F" )
163+ r <- norm(Rk , " F" )
164+ if (r > mu * s )
165+ rho <- rho * tau
166+ else if (s > mu * r )
167+ rho <- rho / tau
170168 Theta <- Thetak
171169 C <- Ck
172170 if (verbose )
0 commit comments