From: Benjamin Auder <benjamin.auder@somewhere>
Date: Wed, 15 Jan 2020 10:34:41 +0000 (+0100)
Subject: Allow to optimize from a given matrix W
X-Git-Url: https://git.auder.net/doc/html/css/scripts/pieces/DESCRIPTION?a=commitdiff_plain;h=35ffd7108a30ae1777dc9e5fc9d33442ad73548e;p=morpheus.git

Allow to optimize from a given matrix W
---

diff --git a/pkg/R/optimParams.R b/pkg/R/optimParams.R
index 411e010..8dfe3dc 100644
--- a/pkg/R/optimParams.R
+++ b/pkg/R/optimParams.R
@@ -253,7 +253,8 @@ setRefClass(
       res
     },
 
-    run = function(θ0)
+    # userW allows to bypass the W optimization by giving a W matrix
+    run = function(θ0, userW=NULL)
     {
       "Run optimization from θ0 with solver..."
 
@@ -279,13 +280,14 @@ setRefClass(
         stop("θ0$b: length K, no NA")
 
       # (Re)Set W to identity, to allow several run from the same object
-      W <<- diag(d+d^2+d^3)
+      W <<- if (is.null(userW)) diag(d+d^2+d^3) else userW
 
-      loopMax <- 2 #TODO: loopMax = 3 ? Seems not improving...
+      #NOTE: loopMax = 3 seems to not improve the final results.
+      loopMax <- ifelse(is.null(userW), 2, 1)
       x_init <- linArgs(θ0)
       for (loop in 1:loopMax)
       {
-        op_res = constrOptim( x_init, .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) ),