Avoid problem with localization tools
[scilab.git] / scilab / modules / optimization / demos / neldermead / neldermead_dimension.sce
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab\r
2 // Copyright (C) 2008-2009 - INRIA - Michael Baudin\r
3 // Copyright (C) 2009-2010 - DIGITEO - Michael Baudin\r
4 // Copyright (C) 2010 - DIGITEO - Allan CORNET\r
5 // Copyright (C) 2012 - Scilab Enterprises - Adeline CARNIS\r
6 //\r
7 // This file must be used under the terms of the CeCILL.\r
8 // This source file is licensed as described in the file COPYING, which\r
9 // you should have received as part of this distribution.  The terms\r
10 // are also available at\r
11 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt\r
12 \r
13 \r
14 function demo_dimension()\r
15 \r
16     mprintf(_("Illustrates the sensitivity to dimension of the Nelder-Mead algorithm\n"));\r
17     mprintf(_("Han and Neumann. ""Effect of dimensionality on the nelder-mead simplex method."" Optimization Methods and Software, 2006.\n"));\r
18 \r
19     function [ f , index ] = quadracticn ( x , index )\r
20         f = sum(x.^2);\r
21     endfunction\r
22 \r
23     //\r
24     // solvepb --\r
25     //   Find the solution for the given number of dimensions\r
26     //\r
27     function [nbfevals , niter , rho] = solvepb ( n )\r
28         rand("seed", 0)\r
29         nm = neldermead_new ();\r
30         nm = neldermead_configure(nm, "-numberofvariables", n);\r
31         nm = neldermead_configure(nm, "-function", quadracticn);\r
32         nm = neldermead_configure(nm, "-x0", zeros(n,1));\r
33         nm = neldermead_configure(nm, "-maxiter", 2000);\r
34         nm = neldermead_configure(nm, "-maxfunevals", 2000);\r
35         nm = neldermead_configure(nm, "-tolxmethod", %f);\r
36         nm = neldermead_configure(nm, "-tolsimplexizerelative", 0.0);\r
37         nm = neldermead_configure(nm, "-tolsimplexizeabsolute", 1.e-8);\r
38         nm = neldermead_configure(nm, "-simplex0method", "given");\r
39         coords (1,1:n) = zeros(1,n);\r
40         for i = 2:n+1\r
41             coords (i,1:n) = 2.0 * rand(1,n) - 1.0;\r
42         end\r
43         nm = neldermead_configure(nm, "-coords0", coords);\r
44         //\r
45         // Perform optimization\r
46         //\r
47         nm = neldermead_search(nm);\r
48         si0 = neldermead_get ( nm , "-simplex0" );\r
49         sigma0 = optimsimplex_size ( si0 , "sigmaplus" );\r
50         siopt = neldermead_get ( nm , "-simplexopt" );\r
51         sigmaopt = optimsimplex_size ( siopt , "sigmaplus" );\r
52         niter = neldermead_get ( nm , "-iterations" );\r
53         rho = (sigmaopt/sigma0)^(1.0/niter);\r
54         nbfevals = neldermead_get ( nm , "-funevals" );\r
55         mprintf ( "%d %d %d %f\n", n , nbfevals , niter , rho );\r
56         nm = neldermead_destroy(nm);\r
57     endfunction\r
58 \r
59     nmax = 20;\r
60     mprintf(_("Maximum dimension:%d\n"),nmax);\r
61     mprintf(_("Column #1: number of dimensions\n"));\r
62     mprintf(_("Column #2: number of function evaluations\n"));\r
63     mprintf(_("Column #3: number of iterations\n"));\r
64     mprintf(_("Column #4: convergence rate (lower is better)\n"));\r
65 \r
66     for n = 1:nmax\r
67         [nbfevals niter rho] = solvepb ( n );\r
68         array_rho(n) = rho;\r
69         array_nbfevals(n) = nbfevals;\r
70         array_niter(n) = niter;\r
71     end\r
72 \r
73     // Plot rate of convergence\r
74     hh = scf();\r
75     plot(1:nmax,array_rho)\r
76     hh.children.x_label.text = _("Number of parameters")\r
77     hh.children.y_label.text = _("Rate of convergence")\r
78     hh.children.children.children.mark_mode = "on";\r
79     hh.children.children.children.mark_style = 9;\r
80     hh.children.children.children.mark_size = 10;\r
81 \r
82     // Plot number of function evaluations\r
83     hh = scf();\r
84     plot(1:nmax,array_nbfevals)\r
85     hh.children.x_label.text = _("Number of parameters")\r
86     hh.children.y_label.text = _("Number of function evaluations")\r
87     hh.children.children.children.mark_mode = "on";\r
88     hh.children.children.children.mark_style = 9;\r
89     hh.children.children.children.mark_size = 10;\r
90     mprintf(_("End of demo.\n"));\r
91 \r
92     //\r
93     //Load this script into the editor\r
94     //\r
95 \r
96     m = messagebox(_("View Code?"), "Question", "question", [_("Yes") _("No")], "modal")\r
97     if(m == 1)\r
98         filename = 'neldermead_dimension.sce';\r
99         dname = get_absolute_file_path(filename);\r
100         editor ( dname + filename, "readonly" );\r
101     end\r
102 endfunction\r
103 \r
104 demo_dimension();\r
105 clear demo_dimension;\r
106 \r
107 \r
108 \r
109 \r
110 \r
111 \r
112 \r\r