M3 <- as.double(Mtmp[[3]])
M <- c(M1, M2, M3)
}
+ else
+ M <- c(M[[1]], M[[2]], M[[3]])
# Build and return optimization algorithm object
methods::new("OptimParams", "li"=link, "X"=X,
n <<- nrow(X)
d <<- ncol(X)
- W <<- diag(d+d^2+d^3) #initialize at W = Identity
+ # W will be initialized when calling run()
},
expArgs = function(v)
θ0$b = rep(0, K)
else if (!is.numeric(θ0$b) || length(θ0$b) != K || any(is.na(θ0$b)))
stop("θ0$b: length K, no NA")
- # TODO: stopping condition? N iterations? Delta <= epsilon ?
- loopMax <- 2
+
+ # (Re)Set W to identity, to allow several run from the same object
+ W <<- diag(d+d^2+d^3)
+
+ loopMax <- 2 #TODO: loopMax = 3 ? Seems not improving...
+ x_init <- linArgs(θ0)
for (loop in 1:loopMax)
{
- op_res = constrOptim( linArgs(θ0), .self$f, .self$grad_f,
+ op_res = constrOptim( x_init, .self$f, .self$grad_f,
ui=cbind(
rbind( rep(-1,K-1), diag(K-1) ),
matrix(0, nrow=K, ncol=(d+1)*K) ),
ci=c(-1,rep(0,K-1)) )
if (loop < loopMax) #avoid computing an extra W
W <<- computeW(expArgs(op_res$par))
- #print(op_res$value) #debug
- #print(expArgs(op_res$par)) #debug
+ #x_init <- op_res$par #degrades performances (TODO: why?)
}
expArgs(op_res$par)