Optimization: fixed bug #7723: demos generated warnings
[scilab.git] / scilab / modules / optimization / demos / neldermead / neldermead_boxbounds.sce
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
11
12 //
13 // neldermeadBounds.sce --
14 //   Show a simple neldermead session with bounds.
15 //
16
17 function demo_boxbounds()
18
19   mprintf(_("Illustrates Box'' algorithm on a simply bounds-constrained optimization problem.\n"));
20
21   // A simple quadratic function
22   function [ f , index ] = myquad ( x , index )
23     f = x(1)^2 + x(2)^2
24   endfunction
25
26   //
27   // Initialize the random number generator, so that the results are always the
28   // same.
29   //
30   rand("seed" , 0)
31
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 );
36
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 );
41
42   nm = nmplot_new ();
43   nm = nmplot_configure(nm,"-numberofvariables",2);
44   nm = nmplot_configure(nm,"-function",myquad);
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]);
49
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");
55   
56   //
57   // Perform optimization
58   //
59   mprintf(_("Searching (please wait) ...\n"));
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);
74   
75   //
76   // Plot
77   //
78   mprintf(_("Plot contour (please wait)...\n"));
79   [nm , xdata , ydata , zdata ] = nmplot_contour ( nm , xmin = 0.5 , xmax = 2.1 , ymin = 0.5 , ymax = 2.1 , nx = 50 , ny = 50 );
80   
81   my_handle = scf(100001);
82   clf(my_handle,"reset");
83   xset("fpf"," ")
84   drawlater();
85   contour ( xdata , ydata , zdata , linspace(min(zdata),max(zdata),10) )
86   nmplot_simplexhistory ( nm );
87   drawnow();
88
89   nm = nmplot_destroy(nm);
90   mprintf(_("End of demo.\n"));
91
92 endfunction
93
94 demo_boxbounds();
95 clear demo_boxbounds;