Finished help for fminsearch
Michaël Baudin [Tue, 1 Sep 2009 09:02:19 +0000 (11:02 +0200)]
scilab/modules/optimization/help/en_US/neldermead/fminsearch.xml
scilab/modules/optimization/help/en_US/optimsimplex/optimsimplex.xml
scilab/modules/optimization/macros/optimsimplex/optimsimplex_pfeffer.sci
scilab/modules/optimization/tests/unit_tests/neldermead/neldermead_kelley.dia.ref [deleted file]

index e5389f3..b95e51b 100644 (file)
@@ -72,7 +72,8 @@
         <term>options</term>
 
         <listitem>
-          <para>A struct which contains configurable options of the algorithm (see below for details).</para>
+          <para>A struct which contains configurable options of the algorithm
+          (see below for details).</para>
         </listitem>
       </varlistentry>
 
               <term>0</term>
 
               <listitem>
-                <para>
-                  The maximum number of function evaluations has been
-                  reached.
-                </para>
+                <para>The maximum number of function evaluations has been
+                reached.</para>
               </listitem>
             </varlistentry>
 
               <term>1</term>
 
               <listitem>
-                <para>
-                  The tolerance on the simplex size and function value delta has been
-                  reached. This signifies that the algorithm has converged, probably to a solution
-                  of the problem.
-                </para>
+                <para>The tolerance on the simplex size and function value
+                delta has been reached. This signifies that the algorithm has
+                converged, probably to a solution of the problem.</para>
               </listitem>
             </varlistentry>
-
           </variablelist>
-
         </listitem>
       </varlistentry>
 
         <term>output</term>
 
         <listitem>
-          <para>
-            A struct which stores detailed information about the exit of the algorithm.
-            This struct contains the following fields.
-          </para>
+          <para>A struct which stores detailed information about the exit of
+          the algorithm. This struct contains the following fields.</para>
 
           <variablelist>
             <varlistentry>
               <term>output.algorithm</term>
 
               <listitem>
-                <para>
-                  A string containing the definition of the algorithm used, i.e. 'Nelder-Mead simplex direct search'.
-                </para>
+                <para>A string containing the definition of the algorithm
+                used, i.e. 'Nelder-Mead simplex direct search'.</para>
               </listitem>
             </varlistentry>
 
               <term>output.funcCount</term>
 
               <listitem>
-                <para>
-                  The number of function evaluations.
-                </para>
+                <para>The number of function evaluations.</para>
               </listitem>
             </varlistentry>
 
               <term>output.iterations</term>
 
               <listitem>
-                <para>
-                  The number of iterations.
-                </para>
+                <para>The number of iterations.</para>
               </listitem>
             </varlistentry>
 
               <term>output.message</term>
 
               <listitem>
-                <para>
-                  A string containing a termination message.
-                </para>
+                <para>A string containing a termination message.</para>
               </listitem>
             </varlistentry>
-
           </variablelist>
-
         </listitem>
       </varlistentry>
-
     </variablelist>
   </refsection>
 
   <refsection>
     <title>Options</title>
-    <para>
-      In this section, we describe the options input argument which
-      have an effect on the algorithm used by fminsearch.
-    </para>
-    <para>
-      The options input argument is a data structure which drives the 
-      behaviour of fminsearch. It allows to handle several options in 
-      a consistent and simple interface, without the problem of 
-      managing many input arguments.
-    </para>
-
-    <para>
-      The fminsearch function is sensitive to the following options.
-    </para>
+
+    <para>In this section, we describe the options input argument which have
+    an effect on the algorithm used by fminsearch.</para>
+
+    <para>The options input argument is a data structure which drives the
+    behaviour of fminsearch. It allows to handle several options in a
+    consistent and simple interface, without the problem of managing many
+    input arguments.</para>
+
+    <para>The fminsearch function is sensitive to the following
+    options.</para>
 
     <variablelist>
       <varlistentry>
         <term>options.MaxIter</term>
+
         <listitem>
-          <para>
-            The maximum number of iterations. The default is 200 * n, where n is the
-            number of variables.
-          </para>
+          <para>The maximum number of iterations. The default is 200 * n,
+          where n is the number of variables.</para>
         </listitem>
       </varlistentry>
 
       <varlistentry>
         <term>options.MaxFunEvals</term>
+
         <listitem>
-          <para>
-            The maximum number of evaluations of the cost function. The default is 200 * n,
-              where n is the number of variables.
-          </para>
+          <para>The maximum number of evaluations of the cost function. The
+          default is 200 * n, where n is the number of variables.</para>
         </listitem>
       </varlistentry>
 
       <varlistentry>
         <term>options.TolFun</term>
+
         <listitem>
-          <para>
-            The absolute tolerance on function value. The default value is 1.e-4.
-          </para>
+          <para>The absolute tolerance on function value. The default value is
+          1.e-4.</para>
         </listitem>
       </varlistentry>
 
       <varlistentry>
         <term>options.TolX</term>
+
         <listitem>
-          <para>
-            The absolute tolerance on simplex size. The default value is 1.e-4.
-          </para>
+          <para>The absolute tolerance on simplex size. The default value is
+          1.e-4.</para>
         </listitem>
       </varlistentry>
-
     </variablelist>
-
   </refsection>
 
   <refsection>
     <title>Termination criteria</title>
-    <para>
-      In this section, we describe the termination criteria used by fminsearch.
-    </para>
 
-    <para>
-      The criteria is based on the following variables:
-    </para>
+    <para>In this section, we describe the termination criteria used by
+    fminsearch.</para>
+
+    <para>The criteria is based on the following variables:</para>
+
     <variablelist>
       <varlistentry>
         <term>ssize</term>
+
         <listitem>
-          <para>
-            the current simplex size,
-          </para>
+          <para>the current simplex size,</para>
         </listitem>
       </varlistentry>
 
       <varlistentry>
         <term>shiftfv</term>
+
         <listitem>
-          <para>
-            the absolute value of the difference of function
-            value between the highest and lowest vertices.
-          </para>
+          <para>the absolute value of the difference of function value between
+          the highest and lowest vertices.</para>
         </listitem>
       </varlistentry>
-      </variablelist>
-        <para>If both the following conditions</para>
+    </variablelist>
+
+    <para>If both the following conditions</para>
 
     <programlisting role="example">ssize &lt; options.TolX</programlisting>
 
-    <para>
-      and
-    </para>
+    <para>and</para>
 
     <programlisting role="example">shiftfv &lt; options.TolFun</programlisting>
 
-    <para>
-      are true, then the iterations stop. 
-    </para>
-
-    <para>
-      The size of the simplex is computed using the "sigmaplus" method of the optimsimplex component.
-      The "sigmamplus" size is the maximum length of the vector from each vertex to the first
-      vertex. It requires one loop over the vertices.
-    </para>
+    <para>are true, then the iterations stop.</para>
 
+    <para>The size of the simplex is computed using the "sigmaplus" method of
+    the optimsimplex component. The "sigmamplus" size is the maximum length of
+    the vector from each vertex to the first vertex. It requires one loop over
+    the vertices of the simplex.</para>
   </refsection>
 
   <refsection>
     <title>The initial simplex</title>
-    <para>
-      TODO
-    </para>
+
+    <para>The fminsearch algorithm uses a special initial simplex, which is an
+    heuristic depending on the initial guess. The strategy chosen by
+    fminsearch corresponds to the -simplex0method flag of the neldermead
+    component, with the "pfeffer" method. It is associated with the
+    -simplex0deltausual = 0.05 and -simplex0deltazero = 0.0075 parameters.
+    Pfeffer's method is an heuristic which is presented in "Global
+    Optimization Of Lennard-Jones Atomic Clusters" by Ellen Fan. It is due to
+    L. Pfeffer at Stanford. See in the help of optimsimplex for more
+    details.</para>
   </refsection>
 
   <refsection>
     <title>The number of iterations</title>
-    <para>
-      TODO
-    </para>
+
+    <para>In this section, we present the default values for the number of
+    iterations in fminsearch.</para>
+
+    <para>The <parameter>options</parameter> input argument is an optionnal
+    data structure which can contain the
+    <parameter>options.MaxIter</parameter> field. It stores the maximum number
+    of iterations. The default value is 200n, where n is the number of
+    variables. The factor 200 has not been chosen by chance, but is the result
+    of experiments performed against quadratic functions with increasing space
+    dimension.</para>
+
+    <para>This result is presented in "Effect of dimensionality on the
+    nelder-mead simplex method" by Lixing Han and Michael Neumann. This paper
+    is based on Lixing Han's PhD, "Algorithms in Unconstrained Optimization".
+    The study is based on numerical experiment with a quadratic function where
+    the number of terms depends on the dimension of the space (i.e. the number
+    of variables). Their study shows that the number of iterations required to
+    reach the tolerance criteria is roughly 100n. Most iterations are based on
+    inside contractions. Since each step of the Nelder-Mead algorithm only
+    require one or two function evaluations, the number of required function
+    evaluations in this experiment is also roughly 100n.</para>
   </refsection>
 
   <refsection>
     <title>Example</title>
 
-    <para>
-      In the following example, we use the fminsearch function to compute
-      the minimum of the Rosenbrock function. We first define the function
-      "banana", and then use the fminsearch function to search the minimum,
-      starting with the initial guess [-1.2 1.0].
-    </para>
+    <para>In the following example, we use the fminsearch function to compute
+    the minimum of the Rosenbrock function. We first define the function
+    "banana", and then use the fminsearch function to search the minimum,
+    starting with the initial guess [-1.2 1.0].</para>
 
     <programlisting role="example">
       function y = banana (x)
   <refsection>
     <title>Bibliography</title>
 
-    <para>
-      "Sequential Application of Simplex Designs in Optimisation and
-      Evolutionary Operation", Spendley, W. and Hext, G. R. and Himsworth, F.
-      R., American Statistical Association and American Society for Quality,
-      1962
-    </para>
-
-    <para>
-      "A Simplex Method for Function Minimization", Nelder, J. A. and
-      Mead, R., The Computer Journal, 1965
-    </para>
-
-    <para>
-      "Iterative Methods for Optimization", C. T. Kelley, SIAM Frontiers
-      in Applied Mathematics, 1999
-    </para>
-
-    <para>
-      "Algorithm AS47 - Function minimization using a simplex procedure",
-      O'Neill, R., Applied Statistics, 1971
-    </para>
+    <para>"Sequential Application of Simplex Designs in Optimisation and
+    Evolutionary Operation", Spendley, W. and Hext, G. R. and Himsworth, F.
+    R., American Statistical Association and American Society for Quality,
+    1962</para>
+
+    <para>"A Simplex Method for Function Minimization", Nelder, J. A. and
+    Mead, R., The Computer Journal, 1965</para>
+
+    <para>"Iterative Methods for Optimization", C. T. Kelley, SIAM Frontiers
+    in Applied Mathematics, 1999</para>
+
+    <para>"Algorithm AS47 - Function minimization using a simplex procedure",
+    O'Neill, R., Applied Statistics, 1971</para>
+
+    <para>"Effect of dimensionality on the nelder-mead simplex method", Lixing
+    Han and Michael Neumann, Optimization Methods and Software, 21, 1, 1--16,
+    2006.</para>
+
+    <para>"Algorithms in Unconstrained Optimization", Lixing Han, Ph.D., The
+    University of Connecticut, 2000.</para>
   </refsection>
 
   <refsection>
 
     <para>Michael Baudin, 2008-2009</para>
   </refsection>
+
+  <refsection>
+    <title>Acknowledgements</title>
+
+    <para>Michael Baudin would like to thank Lixing Han, who kindly sent his
+    PhD thesis.</para>
+  </refsection>
 </refentry>
index c90798a..f27c7a2 100644 (file)
@@ -193,7 +193,7 @@ cen = optimsimplex_xbar ( this , iexcl )</synopsis>
 
     <variablelist>
       <varlistentry>
-        <term>[ newobj , data ] = optimoptimsimplex_new ( coords , fun , data )</term>
+        <term>[ newobj , data ] = optimsimplex_new ( coords , fun , data )</term>
 
         <listitem>
           <para>Creates a new simplex object. All input arguments are
@@ -261,7 +261,7 @@ cen = optimsimplex_xbar ( this , iexcl )</synopsis>
       </varlistentry>
 
       <varlistentry>
-        <term>this = optimoptimsimplex_destroy (this)</term>
+        <term>this = optimsimplex_destroy (this)</term>
 
         <listitem>
           <para>Destroy the given object.</para>
@@ -279,7 +279,7 @@ cen = optimsimplex_xbar ( this , iexcl )</synopsis>
       </varlistentry>
 
       <varlistentry>
-        <term>[ this , data ] = optimoptimsimplex_axes ( this , x0 , fun , len , data
+        <term>[ this , data ] = optimsimplex_axes ( this , x0 , fun , len , data
         )</term>
 
         <listitem>
@@ -353,7 +353,7 @@ cen = optimsimplex_xbar ( this , iexcl )</synopsis>
       </varlistentry>
 
       <varlistentry>
-        <term>[ this , data ] = optimoptimsimplex_pfeffer ( this , x0 , fun , deltausual
+        <term>[ this , data ] = optimsimplex_pfeffer ( this , x0 , fun , deltausual
         , deltazero , data )</term>
 
         <listitem>
@@ -435,7 +435,7 @@ cen = optimsimplex_xbar ( this , iexcl )</synopsis>
       </varlistentry>
 
       <varlistentry>
-        <term>[ this , data ] = optimoptimsimplex_randbounds ( this , x0 , fun ,
+        <term>[ this , data ] = optimsimplex_randbounds ( this , x0 , fun ,
         boundsmin , boundsmax , nbpoints , data )</term>
 
         <listitem>
@@ -529,7 +529,7 @@ cen = optimsimplex_xbar ( this , iexcl )</synopsis>
       </varlistentry>
 
       <varlistentry>
-        <term>[ this , data ] = optimoptimsimplex_spendley ( this , x0 , fun , len ,
+        <term>[ this , data ] = optimsimplex_spendley ( this , x0 , fun , len ,
         data )</term>
 
         <listitem>
@@ -602,7 +602,7 @@ cen = optimsimplex_xbar ( this , iexcl )</synopsis>
       </varlistentry>
 
       <varlistentry>
-        <term>this = optimoptimsimplex_setall ( this , simplex )</term>
+        <term>this = optimsimplex_setall ( this , simplex )</term>
 
         <listitem>
           <para>Set all the coordinates and and the function values of all the
@@ -647,7 +647,7 @@ cen = optimsimplex_xbar ( this , iexcl )</synopsis>
       </varlistentry>
 
       <varlistentry>
-        <term>this = optimoptimsimplex_setallfv ( this , fv )</term>
+        <term>this = optimsimplex_setallfv ( this , fv )</term>
 
         <listitem>
           <para>Set all the function values of all the vertices. The vertex #k
@@ -674,7 +674,7 @@ cen = optimsimplex_xbar ( this , iexcl )</synopsis>
       </varlistentry>
 
       <varlistentry>
-        <term>this = optimoptimsimplex_setallx ( this , x )</term>
+        <term>this = optimsimplex_setallx ( this , x )</term>
 
         <listitem>
           <para>Set all the coordinates of all the vertices. The vertex #k is
@@ -1700,6 +1700,40 @@ s1 = optimsimplex_destroy ( s1 );
   </refsection>
 
   <refsection>
+    <title>Initial simplex strategies</title>
+    <para>
+      In this section, we analyse the various initial simplex which are provided in this 
+      component.
+    </para>
+    <para>
+      It is known that direct search methods based on simplex designs are very 
+      sensitive to the initial simplex. This is why the current component 
+      provides various ways to create such an initial simplex.
+    </para>
+
+    <para>
+      The first historical simplex-based algorithm is the one presented in 
+      "Sequential Application of Simplex Designs in Optimisation and
+      Evolutionary Operation" by W. Spendley, G. R. Hext and F. R. Himsworth.
+      The optimsimplex_spendley function creates the regular simplex which is presented in
+      this paper.
+    </para>
+
+    
+    <para>
+      The method used in the optimsimplex_randbounds function is due to M.J. Box
+      in "A New Method of Constrained Optimization and a Comparison With
+      Other Methods". 
+    </para>
+
+    <para>
+      Pfeffer's method is an heuristic which is presented in "Global Optimization Of Lennard-Jones Atomic Clusters" by
+      Ellen Fan. It is due to L. Pfeffer at Stanford and it is used in fminsearch.
+    </para>
+    
+  </refsection>
+
+  <refsection>
     <title>Authors</title>
 
     <para>Michael Baudin, 2008-2009</para>
@@ -1708,48 +1742,75 @@ s1 = optimsimplex_destroy ( s1 );
   <refsection>
     <title>Bibliography</title>
 
-    <para>&#8220;Sequential Application of Simplex Designs in Optimisation and
-    Evolutionary Operation&#8221;, Spendley, W. and Hext, G. R. and Himsworth,
-    F. R., American Statistical Association and American Society for Quality,
-    1962</para>
+    <para>
+      &#8220;Sequential Application of Simplex Designs in Optimisation and
+      Evolutionary Operation&#8221;, Spendley, W. and Hext, G. R. and Himsworth,
+      F. R., American Statistical Association and American Society for Quality,
+      1962
+    </para>
 
-    <para>"A Simplex Method for Function Minimization", Nelder, J. A. and
-    Mead, R. The Computer Journal, January, 1965, 308--313</para>
+    <para>
+      "A Simplex Method for Function Minimization", Nelder, J. A. and
+      Mead, R. The Computer Journal, January, 1965, 308--313
+    </para>
 
-    <para>"A New Method of Constrained Optimization and a Comparison With
-    Other Methods", M. J. Box, The Computer Journal 1965 8(1):42-52, 1965 by
-    British Computer Society</para>
+    <para>
+      "A New Method of Constrained Optimization and a Comparison With
+      Other Methods", M. J. Box, The Computer Journal 1965 8(1):42-52, 1965 by
+      British Computer Society
+    </para>
 
-    <para>"Iterative Methods for Optimization", C.T. Kelley, 1999, Chapter 6.,
-    section 6.2</para>
+    <para>
+      "Iterative Methods for Optimization", C.T. Kelley, 1999, Chapter 6.,
+      section 6.2
+    </para>
 
-    <para>"Compact Numerical Methods For Computers - Linear Algebra and
-    Function Minimization", J.C. Nash, 1990, Chapter 14. Direct Search
-    Methods</para>
+    <para>
+      "Compact Numerical Methods For Computers - Linear Algebra and
+      Function Minimization", J.C. Nash, 1990, Chapter 14. Direct Search
+      Methods
+    </para>
 
-    <para>"Sequential Application of Simplex Designs in Optimisation and
-    Evolutionary Operation", W. Spendley, G. R. Hext, F. R. Himsworth,
-    Technometrics, Vol. 4, No. 4 (Nov., 1962), pp. 441-461, Section 3.1</para>
+    <para>
+      "Sequential Application of Simplex Designs in Optimisation and
+      Evolutionary Operation", W. Spendley, G. R. Hext, F. R. Himsworth,
+      Technometrics, Vol. 4, No. 4 (Nov., 1962), pp. 441-461, Section 3.1
+    </para>
 
-    <para>"A New Method of Constrained Optimization and a Comparison With
-    Other Methods", M. J. Box, The Computer Journal 1965 8(1):42-52, 1965 by
-    British Computer Society</para>
+    <para>
+      "A New Method of Constrained Optimization and a Comparison With
+      Other Methods", M. J. Box, The Computer Journal 1965 8(1):42-52, 1965 by
+      British Computer Society
+    </para>
 
-    <para>&#8220;Detection and Remediation of Stagnation in the Nelder--Mead
-    Algorithm Using a Sufficient Decrease Condition&#8221;, SIAM J. on
-    Optimization, Kelley,, C. T., 1999</para>
+    <para>
+      &#8220;Detection and Remediation of Stagnation in the Nelder--Mead
+      Algorithm Using a Sufficient Decrease Condition&#8221;, SIAM J. on
+      Optimization, Kelley,, C. T., 1999
+    </para>
 
-    <para>" Multi-Directional Search: A Direct Search Algorithm for Parallel
-    Machines", by E. Boyd, Kenneth W. Kennedy, Richard A. Tapia, Virginia
-    Joanne Torczon,, Virginia Joanne Torczon, 1989, Phd Thesis, Rice
-    University</para>
+    <para>
+      " Multi-Directional Search: A Direct Search Algorithm for Parallel
+      Machines", by E. Boyd, Kenneth W. Kennedy, Richard A. Tapia, Virginia
+      Joanne Torczon,, Virginia Joanne Torczon, 1989, Phd Thesis, Rice
+      University
+    </para>
 
-    <para>"Grid Restrained Nelder-Mead Algorithm", Árpád B&#361;rmen, Janez
-    Puhan, Tadej Tuma, Computational Optimization and Applications, Volume 34
-    , Issue 3 (July 2006), Pages: 359 - 375</para>
+    <para>
+      "Grid Restrained Nelder-Mead Algorithm", Árpád B&#361;rmen, Janez
+      Puhan, Tadej Tuma, Computational Optimization and Applications, Volume 34
+      , Issue 3 (July 2006), Pages: 359 - 375
+    </para>
 
-    <para>"A convergent variant of the Nelder-Mead algorithm", C. J. Price, I.
-    D. Coope, D. Byatt, Journal of Optimization Theory and Applications,
-    Volume 113 , Issue 1 (April 2002), Pages: 5 - 19,</para>
+    <para>
+      "A convergent variant of the Nelder-Mead algorithm", C. J. Price, I.
+      D. Coope, D. Byatt, Journal of Optimization Theory and Applications,
+      Volume 113 , Issue 1 (April 2002), Pages: 5 - 19,
+    </para>
+
+    <para>
+      "Global Optimization Of Lennard-Jones Atomic Clusters",
+      Ellen Fan, Thesis, February 26, 2002, McMaster University
+    </para>
   </refsection>
 </refentry>
index 38be04c..4abc7d5 100644 (file)
@@ -18,6 +18,9 @@
 //   deltausual : the absolute delta for non-zero values
 //   deltazero : the absolute delta for zero values
 //   data : user-defined data
+// References
+//   "Global Optimization Of Lennard-Jones Atomic Clusters"
+//   Ellen Fan, Thesis, February 26, 2002, McMaster University
 //
 function [ this , data ] = optimsimplex_pfeffer ( this , x0 , fun , deltausual , deltazero , data )
    if (~isdef('deltausual','local')) then
diff --git a/scilab/modules/optimization/tests/unit_tests/neldermead/neldermead_kelley.dia.ref b/scilab/modules/optimization/tests/unit_tests/neldermead/neldermead_kelley.dia.ref
deleted file mode 100644 (file)
index 4c7e26b..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2008-2009 - INRIA - Michael Baudin
-//
-// This file must be used under the terms of the CeCILL.
-// This source file is licensed as described in the file COPYING, which
-// you should have received as part of this distribution.  The terms
-// are also available at
-// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
-tbxhome=getenv("SCILABTBX");
-loader = tbxhome + filesep() + 'neldermead'+ filesep() + 'loader.sce';
- Start Nelder-Mead Toolbox   
- Load macros from :   
- D:\Baudin\PROJET~1\TOOLBO~1\NELDER~1\macros\   
- Load help   
-//
-// assert_close --
-//   Returns 1 if the two real matrices computed and expected are close,
-//   i.e. if the relative distance between computed and expected is lesser than epsilon.
-// Arguments
-//   computed, expected : the two matrices to compare
-//   epsilon : a small number
-//
-function flag = assert_close ( computed, expected, epsilon )
-  if expected==0.0 then
-    shift = norm(computed-expected);
-  else
-    shift = norm(computed-expected)/norm(expected);
-  end
-  if shift < epsilon then
-    flag = 1;
-  else
-    flag = 0;
-  end
-  if flag <> 1 then bugmes();quit;end
-endfunction
-function y = rosenbrock (x)
-//global index
-//index = index + 1
-y = 100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
-//mprintf("call #%d, x=(%f,%f), y=%f\n",index,x(1),x(2),y);
-endfunction
-//global index
-//index = 0
-x0 = [];
-P0 = [1.1 1.1]';
-x0(:,1) = P0;
-x0(:,2) = P0 + 0.1 * [1 0]';
-x0(:,3) = P0 + 0.1 * [0 1]';
-x_opt = neldermead_kelley(x0, rosenbrock, tol=1.e-16, maxit=10000,budget=200,verbose=0,oshrink=0);
-computed = x_opt(:,1);
-assert_close ( computed, [1;1], 1e-8 );
-// Add verbose and see if it still works
-x_opt = neldermead_kelley(x0, rosenbrock, tol=1.e-16, maxit=10000,budget=20,verbose=1,oshrink=0);
-x0=
-tol=0.000000
-maxit=10000.000000
-budget=20.000000
-Step #1 : order
-Step #2 : reflect
-xbar=1.1 1.15
-xrho=1 1.2, f(xrho)=4.000000
-Step #4 : contract - outside
-xc=1.05 1.175, f(xc)=0.528125
-       > Accept xc
-Step #1 : order
-Step #2 : reflect
-xbar=1.075 1.1875
-xrho=1.05 1.275, f(xrho)=2.978125
-Step #4 : contract - inside
-xcc=1.0875 1.14375, f(xcc)=0.159026
-       > Accept xcc
-Step #1 : order
-Step #2 : reflect
-xbar=1.09375 1.171875
-xrho=1.1375 1.16875, f(xrho)=1.585315
-Step #4 : contract - inside
-xcc=1.071875 1.1734375, f(xcc)=0.065296
-       > Accept xcc
-Step #1 : order
-Step #2 : reflect
-xbar=1.0859375 1.1867188
-xrho=1.084375 1.2296875, f(xrho)=0.296761
-Step #4 : contract - inside
-xcc=1.0867188 1.1652344, f(xcc)=0.032242
-       > Accept xcc
-Step #1 : order
-Step #2 : reflect
-xbar=1.0933594 1.1826172
-xrho=1.1148438 1.1917969, f(xrho)=0.274103
-Step #4 : contract - inside
-xcc=1.0826172 1.1780273, f(xcc)=0.010387
-       > Accept xcc
-Step #1 : order
-Step #2 : reflect
-xbar=1.0913086 1.1890137
-xrho=1.0958984 1.212793, f(xrho)=0.023120
-Step #4 : contract - outside
-xc=1.0936035 1.2009033, f(xc)=0.011197
-       > Accept xc
-Step #1 : order
-Step #2 : reflect
-xbar=1.0881104 1.1894653
-xrho=1.0762207 1.1789307, f(xrho)=0.048574
-Step #4 : contract - inside
-xcc=1.0940552 1.1947327, f(xcc)=0.009341
-       > Accept xcc
-Step #1 : order
-Step #2 : reflect
-xbar=1.0883362 1.18638
-xrho=1.0830688 1.1718567, f(xrho)=0.007040
-Step #3 : expand
-xe=1.0778015 1.1573334, f(xe)=0.007922
-       > Accept xr
-Step #1 : order
-Step #2 : reflect
-xbar=1.088562 1.1832947
-xrho=1.0945068 1.188562, f(xrho)=0.017736
-Step #4 : contract - inside
-xcc=1.0855896 1.180661, f(xcc)=0.007791
-       > Accept xcc
-Step #1 : order
-computed = x_opt(:,1);
-assert_close ( computed, [1;1], 1e0 );