fminsearch: Removed unnecessary customized options in the demos
[scilab.git] / scilab / modules / optimization / demos / neldermead / neldermead_dimension.sce
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2008-2009 - INRIA - Michael Baudin
3 //
4 // This file must be used under the terms of the CeCILL.
5 // This source file is licensed as described in the file COPYING, which
6 // you should have received as part of this distribution.  The terms
7 // are also available at
8 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
9
10 mprintf("Illustrates the sensitivity to dimension of the Nelder-Mead algorithm\n");
11
12 function [ f , index ] = quadracticn ( x , index )
13   f = sum(x.^2);
14 endfunction
15 //
16 // solvepb --
17 //   Find the solution for the given number of dimensions
18 //
19 function [nbfevals , niter , rho] = solvepb ( n )
20   rand("seed",0)
21   nm = neldermead_new ();
22   nm = neldermead_configure(nm,"-numberofvariables",n);
23   nm = neldermead_configure(nm,"-function",quadracticn);
24   nm = neldermead_configure(nm,"-x0",zeros(n,1));
25   nm = neldermead_configure(nm,"-maxiter",2000);
26   nm = neldermead_configure(nm,"-maxfunevals",2000);
27   nm = neldermead_configure(nm,"-tolxmethod",%f);
28   nm = neldermead_configure(nm,"-tolsimplexizerelative",0.0);
29   nm = neldermead_configure(nm,"-tolsimplexizeabsolute",1.e-8);
30   nm = neldermead_configure(nm,"-simplex0method","given");
31   coords (1,1:n) = zeros(1,n);
32   for i = 2:n+1
33     coords (i,1:n) = 2.0 * rand(1,n) - 1.0;
34   end
35   nm = neldermead_configure(nm,"-coords0",coords);
36   //
37   // Perform optimization
38   //
39   nm = neldermead_search(nm);
40   //neldermead_display(nm);
41   si0 = neldermead_get ( nm , "-simplex0" );
42   sigma0 = optimsimplex_size ( si0 , "sigmaplus" );
43   siopt = neldermead_get ( nm , "-simplexopt" );
44   sigmaopt = optimsimplex_size ( siopt , "sigmaplus" );
45   niter = neldermead_get ( nm , "-iterations" );
46   rho = (sigmaopt/sigma0)^(1.0/niter);
47   nbfevals = neldermead_get ( nm , "-funevals" );
48   mprintf ( "%d %d %d %f\n", n , nbfevals , niter , rho );
49   nm = neldermead_destroy(nm);
50 endfunction
51
52
53 for n = 1:20
54   [nbfevals niter rho] = solvepb ( n );
55   array_rho(n) = rho;
56   array_nbfevals(n) = nbfevals;
57   array_niter(n) = niter;
58 end
59 // Plot rate of convergence
60 hh = scf();
61 plot(1:20,array_rho)
62 hh.children.x_label.text = "Number of parameters"
63 hh.children.y_label.text = "Rate of convergence"
64 hh.children.children.children.mark_mode = "on";
65 hh.children.children.children.mark_style = 9;
66 hh.children.children.children.mark_size = 10;
67
68 // Plot number of function evaluations
69 hh = scf();
70 plot(1:20,array_nbfevals)
71 hh.children.x_label.text = "Number of parameters"
72 hh.children.y_label.text = "Number of function evaluations"
73 hh.children.children.children.mark_mode = "on";
74 hh.children.children.children.mark_style = 9;
75 hh.children.children.children.mark_size = 10;
76 mprintf("End of demo.\n");
77
78 //
79 // Load this script into the editor
80 //
81 filename = 'neldermead_dimension.sce';
82 dname = get_absolute_file_path(filename);
83 editor ( dname + filename );
84