fminsearch: checked types of input arguments after Serge's comments
Michaƫl Baudin [Fri, 23 Oct 2009 14:36:42 +0000 (16:36 +0200)]
16 files changed:
scilab/modules/optimization/macros/neldermead/neldermead_cget.sci
scilab/modules/optimization/macros/neldermead/neldermead_configure.sci
scilab/modules/optimization/macros/neldermead/neldermead_new.sci
scilab/modules/optimization/macros/neldermead/neldermead_search.sci
scilab/modules/optimization/macros/optimbase/optimbase_configure.sci
scilab/modules/optimization/macros/optimsimplex/optimsimplex_new.sci
scilab/modules/optimization/tests/unit_tests/neldermead/neldermead_configure.dia.ref
scilab/modules/optimization/tests/unit_tests/neldermead/neldermead_configure.tst
scilab/modules/optimization/tests/unit_tests/neldermead/neldermead_display.dia.ref
scilab/modules/optimization/tests/unit_tests/neldermead/neldermead_mckinnon.dia.ref
scilab/modules/optimization/tests/unit_tests/neldermead/neldermead_mckinnon.tst
scilab/modules/optimization/tests/unit_tests/neldermead/neldermead_searchdefault.dia.ref
scilab/modules/optimization/tests/unit_tests/neldermead/neldermead_searchdefault.tst
scilab/modules/optimization/tests/unit_tests/neldermead/nmplot_newdestroy.dia.ref
scilab/modules/optimization/tests/unit_tests/optimbase/optimbase_newdestroy.dia.ref
scilab/modules/optimization/tests/unit_tests/optimbase/optimbase_newdestroy.tst

index f5c4ea0..6585fa8 100644 (file)
@@ -93,6 +93,8 @@ function value = neldermead_cget (this,key)
     value = this.tolabsolutevariance;
   case "-tolrelativevariance" then
     value = this.tolrelativevariance;
+  case "-greedy" then
+    value = this.greedy;
   else
     // Delegate to the optimization object
     value = optimbase_cget ( this.optbase , key );
index 5a9d4e6..3eba84a 100644 (file)
@@ -14,6 +14,7 @@
 function this = neldermead_configure (this,key,value)
   select key
   case "-method" then
+    assert_typestring ( value );
     select value
     case "fixed" then
       this.method = "fixed";
@@ -28,8 +29,10 @@ function this = neldermead_configure (this,key,value)
       error(errmsg);
     end
   case "-coords0" then
+    assert_typereal ( value );
     this.coords0 = value;
   case "-simplex0method" then
+    assert_typestring ( value );
     select value
     case "given" then
       this.simplex0method = "given";
@@ -46,24 +49,34 @@ function this = neldermead_configure (this,key,value)
       error(errmsg);
     end
   case "-simplex0length" then
+    assert_typereal ( value );
     this.simplex0length = value;
   case "-simplex0deltausual" then
+    assert_typereal ( value );
     this.simplex0deltausual = value;
   case "-simplex0deltazero" then
+    assert_typereal ( value );
     this.simplex0deltazero = value;
   case "-rho" then
+    assert_typereal ( value );
     this.rho = value;
   case "-chi" then
+    assert_typereal ( value );
     this.chi = value;
   case "-gamma" then
+    assert_typereal ( value );
     this.gamma = value;
   case "-sigma" then
+    assert_typereal ( value );
     this.sigma = value;
   case "-tolsimplexizeabsolute" then
+    assert_typereal ( value );
     this.tolsimplexizeabsolute = value;
   case "-tolsimplexizerelative" then
+    assert_typereal ( value );
     this.tolsimplexizerelative = value;
   case "-tolsimplexizemethod" then
+    assert_typeboolean ( value )
     select value
     case %t then
       this.tolsimplexizemethod = value;
@@ -74,8 +87,10 @@ function this = neldermead_configure (this,key,value)
       error(errmsg);
     end
   case "-toldeltafv" then
+    assert_typereal ( value );
     this.toldeltafv = value;
   case "-tolssizedeltafvmethod" then
+    assert_typeboolean ( value )
     select value
     case %t then
       this.tolssizedeltafvmethod = value;
@@ -86,24 +101,34 @@ function this = neldermead_configure (this,key,value)
       error(errmsg);
     end
   case "-restartmax" then
+    assert_typereal ( value );
     this.restartmax = value;
   case "-restarteps" then
+    assert_typereal ( value );
     this.restarteps = value;
   case "-restartstep" then
+    assert_typereal ( value );
     this.restartstep = value;
   case "-kelleystagnationflag" then
+    assert_typeboolean ( value )
     this.kelleystagnationflag = value;
   case "-kelleynormalizationflag" then
+    assert_typeboolean ( value )
     this.kelleynormalizationflag = value;
   case "-kelleystagnationalpha0" then
+    assert_typereal ( value );
     this.kelleystagnationalpha0 = value;
   case "-restartflag" then
+    assert_typeboolean ( value )
     this.restartflag = value;
   case "-restartdetection" then
+    assert_typestring ( value )
     this.restartdetection = value;
   case "-restartsimplexmethod" then
+    assert_typestring ( value );
     this.restartsimplexmethod = value;
   case "-checkcostfunction" then
+    assert_typeboolean ( value )
     select value
     case %f then
       this.checkcostfunction = value;
@@ -114,32 +139,44 @@ function this = neldermead_configure (this,key,value)
       error(errmsg);
     end
   case "-boxnbpoints" then
+    assert_typereal ( value );
     this.boxnbpoints = value;
   case "-boxineqscaling" then
+    assert_typereal ( value );
     this.boxineqscaling = value;
   case "-scalingsimplex0" then
+    assert_typestring ( value );
     this.scalingsimplex0 = value;
   case "-guinalphamin" then
+    assert_typereal ( value );
     if ( value <=0.0 ) then 
       errmsg = msprintf(gettext("%s: Unexpected negative value %s for -guinalphamin option"),"neldermead_configure", value);
       error(errmsg);
     end
     this.guinalphamin = value;
   case "-boxboundsalpha" then
+    assert_typereal ( value );
     this.boxboundsalpha = value
   case "-boxtermination" then
+    assert_typeboolean ( value );
     this.boxtermination = value
   case "-boxtolf" then
+    assert_typereal ( value );
     this.boxtolf = value
   case "-boxnbmatch" then
+    assert_typereal ( value );
     this.boxnbmatch = value
   case "-boxreflect" then
+    assert_typereal ( value );
     this.boxreflect = value
   case "-mymethod" then
+    assert_typefunction ( value );
     this.mymethod = value
   case "-myterminate" then
+    assert_typefunction ( value );
     this.myterminate = value
   case "-myterminateflag" then
+    assert_typeboolean ( value );
     select value
     case %f then
       this.myterminateflag = value;
@@ -150,14 +187,50 @@ function this = neldermead_configure (this,key,value)
       error(errmsg);
     end
   case "-tolvarianceflag" then
+    assert_typeboolean ( value )
     this.tolvarianceflag = value
   case "-tolabsolutevariance" then
+    assert_typereal ( value );
     this.tolabsolutevariance = value
   case "-tolrelativevariance" then
+    assert_typereal ( value );
     this.tolrelativevariance = value
+  case "-greedy" then
+    assert_typeboolean ( value )
+    this.greedy = value
   else
     // Delegate to the optimization object
     this.optbase = optimbase_configure ( this.optbase , key , value );
   end
 endfunction
+// Generates an error if the given variable is not of type real
+function assert_typereal ( var )
+  if ( type ( var ) <> 1 ) then
+    errmsg = msprintf(gettext("%s: Expected real variable but got %s instead"),"assert_typereal", typeof(var) );
+    error(errmsg);
+  end
+endfunction
+// Generates an error if the given variable is not of type string
+function assert_typestring ( var )
+  if ( type ( var ) <> 10 ) then
+    errmsg = msprintf(gettext("%s: Expected string variable but got %s instead"),"assert_typestring", typeof(var) );
+    error(errmsg);
+  end
+endfunction
+// Generates an error if the given variable is not of type function (macro)
+function assert_typefunction ( var )
+  if ( type ( var ) <> 13 ) then
+    errmsg = msprintf(gettext("%s: Expected function but got %s instead"),"assert_typefunction", typeof(var) );
+    error(errmsg);
+  end
+endfunction
+// Generates an error if the given variable is not of type boolean
+function assert_typeboolean ( var )
+  if ( type ( var ) <> 4 ) then
+    errmsg = msprintf(gettext("%s: Expected boolean but got %s instead"),"assert_typeboolean", typeof(var) );
+    error(errmsg);
+  end
+endfunction
+
+
 
index a5aa11d..ba8b348 100644 (file)
@@ -66,6 +66,7 @@ function newobj = neldermead_new ()
     "mymethod"
     "myterminate"
     "myterminateflag"
+    "greedy"
     ]);
 
   newobj.optbase = optimbase_new();
@@ -159,7 +160,7 @@ function newobj = neldermead_new ()
   // Richardson and Kuester's algorithm 454)
   newobj.boxboundsalpha = 1.e-6
   // Set to 1 to enable Box termination criteria
-  newobj.boxtermination = 0
+  newobj.boxtermination = %f
   // The absolute tolerance on function value in Box termination criteria (beta in
   // Richardson and Kuester's algorithm 454)
   newobj.boxtolf = 1.e-5
@@ -184,5 +185,7 @@ function newobj = neldermead_new ()
   newobj.myterminate = []
   // Flag to enable the user-defined terimination criteria
   newobj.myterminateflag = %f
+  // Set to %t to enable greedy Nelder-Mead
+  newobj.greedy = %f;
 endfunction
 
index d8827c0..7b40d5f 100644 (file)
@@ -78,20 +78,21 @@ endfunction
 //   Performs an optimization with automatic restart
 //
 function this = neldermead_autorestart ( this )
-  for irestart = 1: this.restartmax
-    this = neldermead_log (this,sprintf("Restart #%d/%d", irestart,this.restartmax));
+  restartmax = this.restartmax;
+  for iloop = 1: restartmax + 1
+    this = neldermead_log (this,sprintf("Restart #%d/%d", iloop - 1,restartmax));
     this = neldermead_algo ( this );
     [ this , istorestart ] = neldermead_istorestart ( this );
-    if istorestart==0 then
+    if ( ~istorestart ) then
       this = neldermead_log (this,"Must not restart");
-      this.restartnb  = irestart
+      this.restartnb  = iloop - 1
       break
     else
       this = neldermead_log (this,"Must restart");
     end
-    if ( irestart == this.restartmax ) then
+    if ( iloop == restartmax ) then
       this = neldermead_log (this,"Stopping after all restarts performed");
-      this.restartnb  = irestart
+      this.restartnb  = iloop
       this.optbase = optimbase_set ( this.optbase , "-status" , "maxrestart" );
     else
       this = neldermead_updatesimp ( this );
@@ -128,6 +129,7 @@ function this = neldermead_variable ( this )
   currentcenter = optimsimplex_center ( simplex );
   currentxopt = optimbase_cget ( this.optbase , "-x0" );
   newfvmean = optimsimplex_fvmean ( simplex );
+  greedy = this.greedy;
   //
   // Initialize
   //
@@ -225,18 +227,34 @@ function this = neldermead_variable ( this )
       if ( verbose == 1 ) then
         this = neldermead_log (this,sprintf("xe="+strcat(string(xe)," ")+", f(xe)=%f",fe));
       end
-      if (fe < fr) then
-        if ( verbose == 1 ) then
-          this = neldermead_log (this,sprintf("  > Perform Expansion"));
+      if ( greedy ) then
+        if ( fe < flow ) then
+          if ( verbose == 1 ) then
+            this = neldermead_log (this,sprintf("  > Perform Greedy Expansion"));
+          end
+          simplex = optimsimplex_setve ( simplex , n+1 , fe , xe )
+          step = "expansion";
+        else
+          if ( verbose == 1 ) then
+            this = neldermead_log (this,sprintf("  > Perform Greedy Reflection"));
+          end
+          simplex = optimsimplex_setve ( simplex , n+1 , fr , xr )
+          step = "reflection";
         end
-        simplex = optimsimplex_setve ( simplex , n+1 , fe , xe )
-        step = "expansion";
       else
-        if ( verbose == 1 ) then
-          this = neldermead_log (this,sprintf("  > Perform reflection"));
+        if ( fe < fr ) then
+          if ( verbose == 1 ) then
+            this = neldermead_log (this,sprintf("  > Perform Expansion"));
+          end
+          simplex = optimsimplex_setve ( simplex , n+1 , fe , xe )
+          step = "expansion";
+        else
+          if ( verbose == 1 ) then
+            this = neldermead_log (this,sprintf("  > Perform Reflection"));
+          end
+          simplex = optimsimplex_setve ( simplex , n+1 , fr , xr )
+          step = "reflection";
         end
-        simplex = optimsimplex_setve ( simplex , n+1 , fr , xr )
-        step = "reflection";
       end
     elseif ( fr >= fn & fr < fhigh ) then
       // Outside contraction
@@ -715,9 +733,14 @@ endfunction
 // neldermead_istorestart --
 //   Returns 1 if the optimization is to restart.
 // Arguments
-//   istorestart : 1 of the the optimization is to restart.
+//   istorestart : %t of the the optimization is to restart.
 //
 function [ this , istorestart ] = neldermead_istorestart ( this )
+  status = optimbase_get ( this.optbase , "-status" );
+  if ( status =="maxfuneval" ) then
+    istorestart = %f
+    return
+  end
   select this.restartdetection
   case "oneill"
     [ this , istorestart ] = neldermead_isroneill ( this )
@@ -733,14 +756,14 @@ endfunction
 //   Returns 1 if the optimization is to restart.
 //   Use kelleystagnation as a criteria for restart.
 // Arguments
-//   istorestart : 1 of the the optimization is to restart.
+//   istorestart : %t of the the optimization is to restart.
 //
 function [ this , istorestart ] = neldermead_isrkelley ( this )
-  istorestart = 0
+  istorestart = %f
   if ( this.kelleystagnationflag ) then
     status = optimbase_get ( this.optbase , "-status" );
     if ( status =="kelleystagnation" ) then
-       istorestart = 1
+       istorestart = %t
     end
   end
 endfunction
@@ -755,7 +778,7 @@ endfunction
 //   eps : a small value
 //   step : a list of n values, representing
 //     the "size" of each parameter
-//   istorestart : 1 of the the optimization is to restart.
+//   istorestart : %t if the the optimization is to restart.
 //
 function [ this , istorestart ] = neldermead_isroneill ( this )
   n = optimbase_cget ( this.optbase , "-numberofvariables" );
@@ -769,31 +792,39 @@ function [ this , istorestart ] = neldermead_isroneill ( this )
   else
     step = defaultstep;
   end
+  restarteps = this.restarteps;
 
-  xopt = optimbase_get ( this.optbase , "-xopt" );
+  x = optimbase_get ( this.optbase , "-xopt" );
   fopt = optimbase_get ( this.optbase , "-fopt" );
+  verbose = optimbase_cget ( this.optbase , "-verbose" )
 
-    istorestart = 0
+    istorestart = %f
     for ix = 1:n
       stepix = step ( ix )
-      del = stepix * this.restarteps
+      del = stepix * restarteps
       if ( del==0.0 ) then
          del = eps
       end
-      xoptix =  xopt ( ix )
-      xopt ( ix ) = xoptix + del
-      [ this.optbase , fv , index ] = optimbase_function ( this.optbase , xopt , 2 )
+      xix =  x ( ix )
+      x ( ix ) = xix + del
+      [ this.optbase , fv , index ] = optimbase_function ( this.optbase , x , 2 )
       if ( fv < fopt ) then
-        istorestart = 1
+        istorestart = %t
+        if ( verbose ) then
+          this = neldermead_log (this, sprintf ( "Must restart because fv=%e at [%s] is lower than fopt=%e" , fv , _strvec(x) , fopt) );
+        end
         break
       end
-      xopt ( ix ) = xoptix - del
-      [ this.optbase , fv , index ] = optimbase_function ( this.optbase , xopt , 2 )
+      x ( ix ) = xix - del
+      [ this.optbase , fv , index ] = optimbase_function ( this.optbase , x , 2 )
       if ( fv < fopt ) then
-        istorestart = 1
+        istorestart = %t
+        if ( verbose ) then
+          this = neldermead_log (this, sprintf( "Must restart because fv=%e at [%s] is lower than fopt=%e" , fv , _strvec(x) , fopt) );
+        end
         break
       end
-      xopt ( ix ) = xoptix
+      x ( ix ) = xix
     end
 endfunction
 
index aee692e..4b7c282 100644 (file)
 function this = optimbase_configure (this,key,value)
   select key
   case "-verbose" then
+    assert_typereal ( value );
     this.verbose = value;
   case "-verbosetermination" then
+    assert_typereal ( value );
     this.verbosetermination = value;
   case "-logfile" then
     if ( this.logstartup ) then
@@ -24,6 +26,7 @@ function this = optimbase_configure (this,key,value)
     this.logfile = value;
     this = optimbase_logstartup ( this );
   case "-x0" then
+    assert_typereal ( value );
     [n,m] = size(value);
     if m<>1 then
       errmsg = msprintf(gettext("%s: The x0 vector is expected to be a column matrix, but current shape is %d x %d"),"optimbase_configure",n,m);
@@ -31,18 +34,25 @@ function this = optimbase_configure (this,key,value)
     end
     this.x0 = value;
   case "-maxfunevals" then
+    assert_typereal ( value );
     this.maxfunevals = value;
   case "-maxiter" then
+    assert_typereal ( value );
     this.maxiter = value;
   case "-tolfunabsolute" then
+    assert_typereal ( value );
     this.tolfunabsolute = value;
   case "-tolfunrelative" then
+    assert_typereal ( value );
     this.tolfunrelative = value;
   case "-tolxabsolute" then
+    assert_typereal ( value );
     this.tolxabsolute = value;
   case "-tolxrelative" then
+    assert_typereal ( value );
     this.tolxrelative = value;
   case "-tolxmethod" then
+    assert_typeboolean ( value );
     select value
     case %t then
       this.tolxmethod = %t;
@@ -53,6 +63,7 @@ function this = optimbase_configure (this,key,value)
       error(errmsg);
     end
   case "-tolfunmethod" then
+    assert_typeboolean ( value );
     select value
     case %t then
       this.tolfunmethod = %t;
@@ -63,14 +74,18 @@ function this = optimbase_configure (this,key,value)
       error(errmsg);
     end
   case "-function" then
+    assert_typefunction ( value );
     this.fun = value;
   case "-outputcommand" then
+    assert_typefunction ( value );
     this.outputcommand = value;
   case "-outputcommandarg" then
     this.outputcommandarg = value;
   case "-numberofvariables" then
+    assert_typereal ( value );
     this.numberofvariables = value;
   case "-storehistory" then
+    assert_typeboolean ( value );
     if ( value ) then
       this.storehistory = %t;
     else
@@ -79,12 +94,16 @@ function this = optimbase_configure (this,key,value)
   case "-costfargument" then
     this.costfargument = value;
   case "-boundsmin" then
+    assert_typereal ( value );
     this.boundsmin = value;
   case "-boundsmax" then
+    assert_typereal ( value );
     this.boundsmax = value;
   case "-nbineqconst" then
+    assert_typereal ( value );
     this.nbineqconst = value;
   case "-withderivatives" then
+    assert_typeboolean ( value );
     if ( value ) then
       this.withderivatives = %t;
     else
@@ -95,3 +114,34 @@ function this = optimbase_configure (this,key,value)
     error(errmsg)
   end
 endfunction
+// Generates an error if the given variable is not of type real
+function assert_typereal ( var )
+  if ( type ( var ) <> 1 ) then
+    errmsg = msprintf(gettext("%s: Expected real variable but got %s instead"),"assert_typereal", typeof(var) );
+    error(errmsg);
+  end
+endfunction
+// Generates an error if the given variable is not of type string
+function assert_typestring ( var )
+  if ( type ( var ) <> 10 ) then
+    errmsg = msprintf(gettext("%s: Expected string variable but got %s instead"),"assert_typestring", typeof(var) );
+    error(errmsg);
+  end
+endfunction
+// Generates an error if the given variable is not of type function (macro)
+function assert_typefunction ( var )
+  if ( type ( var ) <> 13 ) then
+    errmsg = msprintf(gettext("%s: Expected function but got %s instead"),"assert_typefunction", typeof(var) );
+    error(errmsg);
+  end
+endfunction
+// Generates an error if the given variable is not of type boolean
+function assert_typeboolean ( var )
+  if ( type ( var ) <> 4 ) then
+    errmsg = msprintf(gettext("%s: Expected boolean but got %s instead"),"assert_typeboolean", typeof(var) );
+    error(errmsg);
+  end
+endfunction
+
+
+
index 54ba661..d7695fe 100644 (file)
@@ -220,9 +220,13 @@ endfunction
 function [ newobj , data ] = optimsimplex_coords ( coords , fun , data )
   if (~isdef('coords','local')) then
     coords = [];
+  else
+    assert_typereal ( coords );
   end
   if (~isdef('fun','local')) then
     fun = [];
+  else
+    assert_typefunction ( fun );
   end
   newobj = tlist(["T_SIMPLEX",...
     "verbose","x","n","fv","nbve"]);
@@ -279,16 +283,20 @@ function [ newobj , data ] = optimsimplex_axes ( x0 , fun , len , data )
   end
   if (~isdef('fun','local')) then
     fun = [];
+  else
+  assert_typefunction ( fun );
   end
   if (~isdef('len','local')) then
     len = 1.0;
   else
+    assert_typereal ( len );
     xlen1 = size(len,1)
     if size(x0,1)<>1 then
       errmsg = msprintf(gettext("%s: The len vector is expected to be a row matrix, but current shape is %d x %d"),"optimsimplex_axes",size(len,1),size(len,2));
       error(errmsg);
     end
   end
+  assert_typereal ( x0 );
   n = length(x0);
   newobj.n = n;
   newobj.nbve = n + 1;
@@ -334,15 +342,19 @@ function [ newobj , data ] = optimsimplex_spendley ( x0 , fun , len , data )
   end
   if (~isdef('fun','local')) then
     fun = [];
+  else
+    assert_typefunction ( fun );
   end
   if (~isdef('len','local')) then
    len = 1.0;
   else
+    assert_typereal ( len );
     if ( size(len,1)<>1 | size(len,2)<>1 ) then
       errmsg = msprintf(gettext("%s: The len vector is expected to be a scalar, but current shape is %d x %d"),"optimsimplex_spendley",size(len,1),size(len,2));
       error(errmsg);
     end
   end
+  assert_typereal ( x0 );
   n = length(x0);
   newobj.n = n;
   newobj.nbve = n + 1;
@@ -393,6 +405,8 @@ function [ newobj , data ] = optimsimplex_pfeffer ( x0 , fun , deltausual , delt
   end
   if (~isdef('fun','local')) then
     fun = [];
+  else
+    assert_typefunction ( fun );
   end
    if (~isdef('deltausual','local')) then
     deltausual = 0.05
@@ -400,6 +414,9 @@ function [ newobj , data ] = optimsimplex_pfeffer ( x0 , fun , deltausual , delt
    if (~isdef('deltazero','local')) then
     deltazero = 0.0075
   end
+  assert_typereal ( x0 );
+  assert_typereal ( deltausual );
+  assert_typereal ( deltazero );
   if size(x0,1)<>1 then
     errmsg = msprintf(gettext("%s: The x0 vector is expected to be a row matrix, but current shape is %d x %d"),"optimsimplex_pfeffer",size(x0,1),size(x0,2));
     error(errmsg);
@@ -461,9 +478,15 @@ function [ newobj , data ] = optimsimplex_randbounds ( x0 , fun , boundsmin , bo
     errmsg = msprintf(gettext("%s: The boundsmax vector is expected to be a row matrix, but current shape is %d x %d"),"optimsimplex_randbounds",size(boundsmax,1),size(boundsmax,2));
     error(errmsg);
   end
+  assert_typereal ( x0 );
+  assert_typefunction ( fun );
+  assert_typereal ( boundsmin );
+  assert_typereal ( boundsmax );
     n = length ( x0 )
     if (~isdef('nbve','local')) then
       nbve = n + 1;
+    else
+      assert_typereal ( nbve );
     end
     newobj.n = n;
     newobj.nbve = nbve;
@@ -505,6 +528,8 @@ function [ newobj , data ] = optimsimplex_oriented ( simplex0 , fun , data )
   end
   if (~isdef('fun','local')) then
     fun = [];
+  else
+    assert_typefunction ( fun );
   end
   sgrad = optimsimplex_gradientfv ( simplex0 )
   ssize = optimsimplex_size ( simplex0 , "sigmaminus" )
@@ -538,4 +563,33 @@ function [ newobj , data ] = optimsimplex_oriented ( simplex0 , fun , data )
     end
   end
 endfunction
+// Generates an error if the given variable is not of type real
+function assert_typereal ( var )
+  if ( type ( var ) <> 1 ) then
+    errmsg = msprintf(gettext("%s: Expected real variable but got %s instead"),"assert_typereal", typeof(var) );
+    error(errmsg);
+  end
+endfunction
+// Generates an error if the given variable is not of type string
+function assert_typestring ( var )
+  if ( type ( var ) <> 10 ) then
+    errmsg = msprintf(gettext("%s: Expected string variable but got %s instead"),"assert_typestring", typeof(var) );
+    error(errmsg);
+  end
+endfunction
+// Generates an error if the given variable is not of type function (macro)
+function assert_typefunction ( var )
+  if ( type ( var ) <> 13 ) then
+    errmsg = msprintf(gettext("%s: Expected function but got %s instead"),"assert_typefunction", typeof(var) );
+    error(errmsg);
+  end
+endfunction
+// Generates an error if the given variable is not of type boolean
+function assert_typeboolean ( var )
+  if ( type ( var ) <> 4 ) then
+    errmsg = msprintf(gettext("%s: Expected boolean but got %s instead"),"assert_typeboolean", typeof(var) );
+    error(errmsg);
+  end
+endfunction
+
 
index b83f2e6..6b8c774 100644 (file)
@@ -105,7 +105,7 @@ nm = neldermead_new ();
 cmd = "nm = neldermead_configure(nm,''-tolsimplexizemethod'',''foo'')";
 execstr(cmd,"errcatch");
 computed = lasterror();
-expected = "neldermead_configure: Unknown value foo for -tolsimplexizemethod option";
+expected = "assert_typeboolean: Expected boolean but got string instead";
 assert_equal ( computed , expected );
 nm = neldermead_destroy(nm);
 // Wrong -tolssizedeltafvmethod flag
@@ -113,7 +113,7 @@ nm = neldermead_new ();
 cmd = "nm = neldermead_configure(nm,''-tolssizedeltafvmethod'',''foo'')";
 execstr(cmd,"errcatch");
 computed = lasterror();
-expected = "neldermead_configure: Unknown value foo for -tolssizedeltafvmethod option";
+expected = "assert_typeboolean: Expected boolean but got string instead";
 assert_equal ( computed , expected );
 nm = neldermead_destroy(nm);
 //
index 4f5be3d..1c5e8ab 100644 (file)
@@ -113,7 +113,7 @@ nm = neldermead_new ();
 cmd = "nm = neldermead_configure(nm,''-tolsimplexizemethod'',''foo'')";
 execstr(cmd,"errcatch");
 computed = lasterror();
-expected = "neldermead_configure: Unknown value foo for -tolsimplexizemethod option";
+expected = "assert_typeboolean: Expected boolean but got string instead";
 assert_equal ( computed , expected );
 nm = neldermead_destroy(nm);
 
@@ -122,7 +122,7 @@ nm = neldermead_new ();
 cmd = "nm = neldermead_configure(nm,''-tolssizedeltafvmethod'',''foo'')";
 execstr(cmd,"errcatch");
 computed = lasterror();
-expected = "neldermead_configure: Unknown value foo for -tolssizedeltafvmethod option";
+expected = "assert_typeboolean: Expected boolean but got string instead";
 assert_equal ( computed , expected );
 nm = neldermead_destroy(nm);
 
index f7ab982..003cc64 100644 (file)
@@ -128,7 +128,7 @@ Termination on Kelley's Stagnation, Alpha0 : 0.0001
 
 Termination on Kelley's Stagnation, Alpha : 0.0001
 
-Termination by Box : 0
+Termination by Box : F
 
 Termination by Box, Absolute Tolerance on Function: 0.00001
 
index 01ec80e..70efa8d 100644 (file)
@@ -214,7 +214,7 @@ nm = neldermead_configure(nm,"-coords0",coords0);
 nm = neldermead_configure(nm,"-method","variable");
 nm = neldermead_configure(nm,"-verbose",0);
 nm = neldermead_configure(nm,"-verbosetermination",0);
-nm = neldermead_configure(nm,"-kelleystagnationflag",1);
+nm = neldermead_configure(nm,"-kelleystagnationflag",%t);
 nm = neldermead_search(nm);
 // Check status
 status = neldermead_get(nm,"-status");
@@ -236,8 +236,8 @@ nm = neldermead_configure(nm,"-coords0",coords0);
 nm = neldermead_configure(nm,"-method","variable");
 nm = neldermead_configure(nm,"-verbose",0);
 nm = neldermead_configure(nm,"-verbosetermination",0);
-nm = neldermead_configure(nm,"-kelleystagnationflag",1);
-nm = neldermead_configure(nm,"-restartflag",1);
+nm = neldermead_configure(nm,"-kelleystagnationflag",%t);
+nm = neldermead_configure(nm,"-restartflag",%t);
 nm = neldermead_configure(nm,"-restartdetection","kelley");
 nm = neldermead_search(nm);
 // Check status
@@ -273,7 +273,7 @@ nm = neldermead_configure(nm,"-verbose",0);
 nm = neldermead_configure(nm,"-verbosetermination",0);
 nm = neldermead_configure(nm,"-tolsimplexizemethod",%t);
 nm = neldermead_configure(nm,"-tolsimplexizerelative",1.e-6);
-nm = neldermead_configure(nm,"-restartflag",1);
+nm = neldermead_configure(nm,"-restartflag",%t);
 nm = neldermead_configure(nm,"-restartdetection","oneill");
 nm = neldermead_search(nm);
 Warning :
@@ -313,8 +313,8 @@ nm = neldermead_configure(nm,"-coords0",coords0);
 nm = neldermead_configure(nm,"-method","variable");
 nm = neldermead_configure(nm,"-verbose",0);
 nm = neldermead_configure(nm,"-verbosetermination",0);
-nm = neldermead_configure(nm,"-kelleystagnationflag",1);
-nm = neldermead_configure(nm,"-restartflag",1);
+nm = neldermead_configure(nm,"-kelleystagnationflag",%t);
+nm = neldermead_configure(nm,"-restartflag",%t);
 nm = neldermead_configure(nm,"-restartdetection","kelley");
 nm = neldermead_configure(nm,"-restartsimplexmethod","axes");
 nm = neldermead_configure(nm,"-kelleystagnationalpha0",1.e-2);
@@ -352,8 +352,8 @@ nm = neldermead_configure(nm,"-coords0",coords0);
 nm = neldermead_configure(nm,"-method","variable");
 nm = neldermead_configure(nm,"-verbose",0);
 nm = neldermead_configure(nm,"-verbosetermination",0);
-nm = neldermead_configure(nm,"-kelleystagnationflag",1);
-nm = neldermead_configure(nm,"-restartflag",1);
+nm = neldermead_configure(nm,"-kelleystagnationflag",%t);
+nm = neldermead_configure(nm,"-restartflag",%t);
 nm = neldermead_configure(nm,"-restartdetection","kelley");
 nm = neldermead_configure(nm,"-restartsimplexmethod","spendley");
 nm = neldermead_configure(nm,"-kelleystagnationalpha0",1.e-2);
@@ -393,8 +393,8 @@ nm = neldermead_configure(nm,"-coords0",coords0);
 nm = neldermead_configure(nm,"-method","variable");
 nm = neldermead_configure(nm,"-verbose",0);
 nm = neldermead_configure(nm,"-verbosetermination",0);
-nm = neldermead_configure(nm,"-kelleystagnationflag",1);
-nm = neldermead_configure(nm,"-restartflag",1);
+nm = neldermead_configure(nm,"-kelleystagnationflag",%t);
+nm = neldermead_configure(nm,"-restartflag",%t);
 nm = neldermead_configure(nm,"-restartdetection","kelley");
 nm = neldermead_configure(nm,"-restartsimplexmethod","pfeffer");
 nm = neldermead_configure(nm,"-kelleystagnationalpha0",1.e-2);
index fc2f5fb..7b94e42 100644 (file)
@@ -222,7 +222,7 @@ nm = neldermead_configure(nm,"-coords0",coords0);
 nm = neldermead_configure(nm,"-method","variable");
 nm = neldermead_configure(nm,"-verbose",0);
 nm = neldermead_configure(nm,"-verbosetermination",0);
-nm = neldermead_configure(nm,"-kelleystagnationflag",1);
+nm = neldermead_configure(nm,"-kelleystagnationflag",%t);
 nm = neldermead_search(nm);
 // Check status
 status = neldermead_get(nm,"-status");
@@ -245,8 +245,8 @@ nm = neldermead_configure(nm,"-coords0",coords0);
 nm = neldermead_configure(nm,"-method","variable");
 nm = neldermead_configure(nm,"-verbose",0);
 nm = neldermead_configure(nm,"-verbosetermination",0);
-nm = neldermead_configure(nm,"-kelleystagnationflag",1);
-nm = neldermead_configure(nm,"-restartflag",1);
+nm = neldermead_configure(nm,"-kelleystagnationflag",%t);
+nm = neldermead_configure(nm,"-restartflag",%t);
 nm = neldermead_configure(nm,"-restartdetection","kelley");
 nm = neldermead_search(nm);
 // Check status
@@ -283,7 +283,7 @@ nm = neldermead_configure(nm,"-verbose",0);
 nm = neldermead_configure(nm,"-verbosetermination",0);
 nm = neldermead_configure(nm,"-tolsimplexizemethod",%t);
 nm = neldermead_configure(nm,"-tolsimplexizerelative",1.e-6);
-nm = neldermead_configure(nm,"-restartflag",1);
+nm = neldermead_configure(nm,"-restartflag",%t);
 nm = neldermead_configure(nm,"-restartdetection","oneill");
 nm = neldermead_search(nm);
 // Check status
@@ -320,8 +320,8 @@ nm = neldermead_configure(nm,"-coords0",coords0);
 nm = neldermead_configure(nm,"-method","variable");
 nm = neldermead_configure(nm,"-verbose",0);
 nm = neldermead_configure(nm,"-verbosetermination",0);
-nm = neldermead_configure(nm,"-kelleystagnationflag",1);
-nm = neldermead_configure(nm,"-restartflag",1);
+nm = neldermead_configure(nm,"-kelleystagnationflag",%t);
+nm = neldermead_configure(nm,"-restartflag",%t);
 nm = neldermead_configure(nm,"-restartdetection","kelley");
 nm = neldermead_configure(nm,"-restartsimplexmethod","axes");
 nm = neldermead_configure(nm,"-kelleystagnationalpha0",1.e-2);
@@ -360,8 +360,8 @@ nm = neldermead_configure(nm,"-coords0",coords0);
 nm = neldermead_configure(nm,"-method","variable");
 nm = neldermead_configure(nm,"-verbose",0);
 nm = neldermead_configure(nm,"-verbosetermination",0);
-nm = neldermead_configure(nm,"-kelleystagnationflag",1);
-nm = neldermead_configure(nm,"-restartflag",1);
+nm = neldermead_configure(nm,"-kelleystagnationflag",%t);
+nm = neldermead_configure(nm,"-restartflag",%t);
 nm = neldermead_configure(nm,"-restartdetection","kelley");
 nm = neldermead_configure(nm,"-restartsimplexmethod","spendley");
 nm = neldermead_configure(nm,"-kelleystagnationalpha0",1.e-2);
@@ -402,8 +402,8 @@ nm = neldermead_configure(nm,"-coords0",coords0);
 nm = neldermead_configure(nm,"-method","variable");
 nm = neldermead_configure(nm,"-verbose",0);
 nm = neldermead_configure(nm,"-verbosetermination",0);
-nm = neldermead_configure(nm,"-kelleystagnationflag",1);
-nm = neldermead_configure(nm,"-restartflag",1);
+nm = neldermead_configure(nm,"-kelleystagnationflag",%t);
+nm = neldermead_configure(nm,"-restartflag",%t);
 nm = neldermead_configure(nm,"-restartdetection","kelley");
 nm = neldermead_configure(nm,"-restartsimplexmethod","pfeffer");
 nm = neldermead_configure(nm,"-kelleystagnationalpha0",1.e-2);
index f55f9bb..2363d9c 100644 (file)
@@ -157,8 +157,8 @@ nm = neldermead_configure(nm,"-coords0",coords0);
 nm = neldermead_configure(nm,"-method","variable");
 nm = neldermead_configure(nm,"-verbose",0);
 nm = neldermead_configure(nm,"-verbosetermination",0);
-nm = neldermead_configure(nm,"-kelleystagnationflag",1);
-nm = neldermead_configure(nm,"-restartflag",1);
+nm = neldermead_configure(nm,"-kelleystagnationflag",%t);
+nm = neldermead_configure(nm,"-restartflag",%t);
 nm = neldermead_configure(nm,"-restartdetection","foo");
 nm = neldermead_configure(nm,"-restartsimplexmethod","spendley");
 nm = neldermead_configure(nm,"-kelleystagnationalpha0",1.e-2);
index fdbd2f1..12531a8 100644 (file)
@@ -168,8 +168,8 @@ nm = neldermead_configure(nm,"-coords0",coords0);
 nm = neldermead_configure(nm,"-method","variable");
 nm = neldermead_configure(nm,"-verbose",0);
 nm = neldermead_configure(nm,"-verbosetermination",0);
-nm = neldermead_configure(nm,"-kelleystagnationflag",1);
-nm = neldermead_configure(nm,"-restartflag",1);
+nm = neldermead_configure(nm,"-kelleystagnationflag",%t);
+nm = neldermead_configure(nm,"-restartflag",%t);
 nm = neldermead_configure(nm,"-restartdetection","foo");
 nm = neldermead_configure(nm,"-restartsimplexmethod","spendley");
 nm = neldermead_configure(nm,"-kelleystagnationalpha0",1.e-2);
index 6b1d39a..e582501 100644 (file)
@@ -169,7 +169,7 @@ Termination on Kelley's Stagnation, Alpha0 : 0.0001
 
 Termination on Kelley's Stagnation, Alpha : 0.0001
 
-Termination by Box : 0
+Termination by Box : F
 
 Termination by Box, Absolute Tolerance on Function: 0.00001
 
index 794c80e..76351b8 100644 (file)
@@ -220,12 +220,12 @@ opt = optimbase_incriter ( opt );
 iter = optimbase_get ( opt , "-iterations");
 assert_equal ( iter , 1 );
 // Check history storing with xopt
-opt = optimbase_configure ( opt , "-storehistory" , 1 );
+opt = optimbase_configure ( opt , "-storehistory" , %t );
 opt = optimbase_histset ( opt , 1 , "-xopt" , [1.0 1.0]' );
 x0 = optimbase_histget ( opt , 1 , "-xopt" );
 assert_close ( x0 , [1.0 1.0]', %eps );
 // Check history storing with fopt
-opt = optimbase_configure ( opt , "-storehistory" , 1 );
+opt = optimbase_configure ( opt , "-storehistory" , %t );
 opt = optimbase_histset ( opt , 1 , "-fopt" , 1.0 );
 f0 = optimbase_histget ( opt , 1 , "-fopt" );
 assert_close ( f0 , 1.0, %eps );
@@ -311,7 +311,7 @@ assert_equal ( computed , expected );
 cmd = "optimbase_configure(opt,''-tolxmethod'',''foo'')";
 execstr(cmd,"errcatch");
 computed = lasterror();
-expected = "optimbase_configure: Unknown value foo for -tolxmethod option";
+expected = "assert_typeboolean: Expected boolean but got string instead";
 assert_equal ( computed , expected );
 //
 // Test wrong -tolfunmethod
@@ -319,7 +319,7 @@ assert_equal ( computed , expected );
 cmd = "optimbase_configure(opt,''-tolfunmethod'',''foo'')";
 execstr(cmd,"errcatch");
 computed = lasterror();
-expected = "optimbase_configure: Unknown value foo for -tolfunmethod";
+expected = "assert_typeboolean: Expected boolean but got string instead";
 assert_equal ( computed , expected );
 // Cleanup
 opt = optimbase_destroy(opt);
@@ -373,7 +373,7 @@ computed = lasterror();
 expected = "optimbase_get: History disabled ; enable -storehistory option.";
 assert_equal ( computed , expected );
 // Test optimbase_function when there is no function
-cmd = "[ opt , f , index ] = optimbase_function ( opt , [] , 1 )";
+cmd = "[ opt , f , index ] = optimbase_function ( opt , [] , %t )";
 execstr(cmd,"errcatch");
 computed = lasterror();
 expected = "optimbase_function: Empty function (use -function option).";
@@ -385,7 +385,7 @@ computed = lasterror();
 expected = "optimbase_histget: History disabled ; turn on -storehistory option.";
 assert_equal ( computed , expected );
 // Test optimbase_histget ( this , iter , key ) with negative iteration
-opt = optimbase_configure ( opt , "-storehistory" , 1 );
+opt = optimbase_configure ( opt , "-storehistory" , %t );
 cmd = "optimbase_histget ( opt , -1 , ''-xopt'' )";
 execstr(cmd,"errcatch");
 computed = lasterror();
index 36c12c2..4252184 100644 (file)
@@ -224,12 +224,12 @@ opt = optimbase_incriter ( opt );
 iter = optimbase_get ( opt , "-iterations");
 assert_equal ( iter , 1 );
 // Check history storing with xopt
-opt = optimbase_configure ( opt , "-storehistory" , 1 );
+opt = optimbase_configure ( opt , "-storehistory" , %t );
 opt = optimbase_histset ( opt , 1 , "-xopt" , [1.0 1.0]' );
 x0 = optimbase_histget ( opt , 1 , "-xopt" );
 assert_close ( x0 , [1.0 1.0]', %eps );
 // Check history storing with fopt
-opt = optimbase_configure ( opt , "-storehistory" , 1 );
+opt = optimbase_configure ( opt , "-storehistory" , %t );
 opt = optimbase_histset ( opt , 1 , "-fopt" , 1.0 );
 f0 = optimbase_histget ( opt , 1 , "-fopt" );
 assert_close ( f0 , 1.0, %eps );
@@ -266,7 +266,7 @@ assert_equal ( computed , expected );
 cmd = "optimbase_configure(opt,''-tolxmethod'',''foo'')";
 execstr(cmd,"errcatch");
 computed = lasterror();
-expected = "optimbase_configure: Unknown value foo for -tolxmethod option";
+expected = "assert_typeboolean: Expected boolean but got string instead";
 assert_equal ( computed , expected );
 //
 // Test wrong -tolfunmethod
@@ -274,7 +274,7 @@ assert_equal ( computed , expected );
 cmd = "optimbase_configure(opt,''-tolfunmethod'',''foo'')";
 execstr(cmd,"errcatch");
 computed = lasterror();
-expected = "optimbase_configure: Unknown value foo for -tolfunmethod";
+expected = "assert_typeboolean: Expected boolean but got string instead";
 assert_equal ( computed , expected );
 // Cleanup
 opt = optimbase_destroy(opt);
@@ -333,7 +333,7 @@ computed = lasterror();
 expected = "optimbase_get: History disabled ; enable -storehistory option.";
 assert_equal ( computed , expected );
 // Test optimbase_function when there is no function
-cmd = "[ opt , f , index ] = optimbase_function ( opt , [] , 1 )";
+cmd = "[ opt , f , index ] = optimbase_function ( opt , [] , %t )";
 execstr(cmd,"errcatch");
 computed = lasterror();
 expected = "optimbase_function: Empty function (use -function option).";
@@ -345,7 +345,7 @@ computed = lasterror();
 expected = "optimbase_histget: History disabled ; turn on -storehistory option.";
 assert_equal ( computed , expected );
 // Test optimbase_histget ( this , iter , key ) with negative iteration
-opt = optimbase_configure ( opt , "-storehistory" , 1 );
+opt = optimbase_configure ( opt , "-storehistory" , %t );
 cmd = "optimbase_histget ( opt , -1 , ''-xopt'' )";
 execstr(cmd,"errcatch");
 computed = lasterror();