1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2010 - DIGITEO - Michael Baudin
3 // Copyright (C) 2010 - DIGITEO - Allan CORNET
4 // Copyright (C) 2011 - DIGITEO - Michael Baudin
5 //
6 // This file must be used under the terms of the CeCILL.
7 // This source file is licensed as described in the file COPYING, which
8 // you should have received as part of this distribution.  The terms
9 // are also available at
10 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
12 //
14 //   Show a simple neldermead session with bounds.
15 //
17 function demo_boxbounds()
19   mprintf(_("Illustrates Box'' algorithm on a simply bounds-constrained optimization problem.\n"));
21   // A simple quadratic function
22   function [ f , index ] = myquad ( x , index )
23     f = x(1)^2 + x(2)^2
24   endfunction
26   //
27   // Initialize the random number generator, so that the results are always the
28   // same.
29   //
30   rand("seed" , 0)
32   x0 = [1.2 1.9].';
33   // Compute f(x0) : should be close to -2351244.0
34   [ fx0 , index ] = myquad ( x0 , 2 );
35   mprintf("Computed fx0 = %e (expected = %e)\n",fx0 , 5.05 );
37   xopt = [1 1].';
38   // Compute f(xopt) : should be 2
39   [ fopt , index ] = myquad ( xopt , 2 );
40   mprintf("Computed fopt = %e (expected = %e)\n", fopt , 2 );
42   nm = nmplot_new ();
43   nm = nmplot_configure(nm,"-numberofvariables",2);
45   nm = nmplot_configure(nm,"-x0",x0);
46   nm = nmplot_configure(nm,"-method","box");
47   nm = nmplot_configure(nm,"-boundsmin",[1 1]);
48   nm = nmplot_configure(nm,"-boundsmax",[2 2]);
50   //
51   // Check that the cost function is correctly connected.
52   //
53   [ nm , f ] = nmplot_function ( nm , x0 );
54   nm = nmplot_configure(nm,"-simplexfn",TMPDIR + "/history.simplex.txt");
56   //
57   // Perform optimization
58   //
60   nm = nmplot_search(nm);
61   mprintf(_("...Done\n"));
62   disp(nm);
63   mprintf("==========================\n");
64   xcomp = nmplot_get(nm,"-xopt");
65   mprintf("x computed = %s\n",strcat(string(xcomp), " "));
66   mprintf("x expected = %s\n",strcat(string(xopt), " "));
67   shift = norm(xcomp-xopt)/norm(xopt);
68   mprintf("Shift = %f\n",shift);
69   fcomp = nmplot_get(nm,"-fopt");
70   mprintf("f computed = %f\n",fcomp);
71   mprintf("f expected = %f\n",fopt);
72   shift = abs(fcomp-fopt)/abs(fopt);
73   mprintf("Shift =%f\n",shift);
75   //
76   // Plot
77   //