Merge branch 'master' of git@git.scilab.org:scilab
[scilab.git] / scilab / modules / optimization / tests / unit_tests / neldermead / neldermead_kelley.dia.ref
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 tbxhome=getenv("SCILABTBX");
10 loader = tbxhome + filesep() + 'neldermead'+ filesep() + 'loader.sce';
11  
12  Start Nelder-Mead Toolbox   
13  
14  Load macros from :   
15  
16  D:\Baudin\PROJET~1\TOOLBO~1\NELDER~1\macros\   
17  
18  Load help   
19 //
20 // assert_close --
21 //   Returns 1 if the two real matrices computed and expected are close,
22 //   i.e. if the relative distance between computed and expected is lesser than epsilon.
23 // Arguments
24 //   computed, expected : the two matrices to compare
25 //   epsilon : a small number
26 //
27 function flag = assert_close ( computed, expected, epsilon )
28   if expected==0.0 then
29     shift = norm(computed-expected);
30   else
31     shift = norm(computed-expected)/norm(expected);
32   end
33   if shift < epsilon then
34     flag = 1;
35   else
36     flag = 0;
37   end
38   if flag <> 1 then bugmes();quit;end
39 endfunction
40 function y = rosenbrock (x)
41 //global index
42 //index = index + 1
43 y = 100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
44 //mprintf("call #%d, x=(%f,%f), y=%f\n",index,x(1),x(2),y);
45 endfunction
46 //global index
47 //index = 0
48 x0 = [];
49 P0 = [1.1 1.1]';
50 x0(:,1) = P0;
51 x0(:,2) = P0 + 0.1 * [1 0]';
52 x0(:,3) = P0 + 0.1 * [0 1]';
53 x_opt = neldermead_kelley(x0, rosenbrock, tol=1.e-16, maxit=10000,budget=200,verbose=0,oshrink=0);
54 computed = x_opt(:,1);
55 assert_close ( computed, [1;1], 1e-8 );
56 // Add verbose and see if it still works
57 x_opt = neldermead_kelley(x0, rosenbrock, tol=1.e-16, maxit=10000,budget=20,verbose=1,oshrink=0);
58 x0=
59 tol=0.000000
60 maxit=10000.000000
61 budget=20.000000
62 Step #1 : order
63 Step #2 : reflect
64 xbar=1.1 1.15
65 xrho=1 1.2, f(xrho)=4.000000
66 Step #4 : contract - outside
67 xc=1.05 1.175, f(xc)=0.528125
68         > Accept xc
69 Step #1 : order
70 Step #2 : reflect
71 xbar=1.075 1.1875
72 xrho=1.05 1.275, f(xrho)=2.978125
73 Step #4 : contract - inside
74 xcc=1.0875 1.14375, f(xcc)=0.159026
75         > Accept xcc
76 Step #1 : order
77 Step #2 : reflect
78 xbar=1.09375 1.171875
79 xrho=1.1375 1.16875, f(xrho)=1.585315
80 Step #4 : contract - inside
81 xcc=1.071875 1.1734375, f(xcc)=0.065296
82         > Accept xcc
83 Step #1 : order
84 Step #2 : reflect
85 xbar=1.0859375 1.1867188
86 xrho=1.084375 1.2296875, f(xrho)=0.296761
87 Step #4 : contract - inside
88 xcc=1.0867188 1.1652344, f(xcc)=0.032242
89         > Accept xcc
90 Step #1 : order
91 Step #2 : reflect
92 xbar=1.0933594 1.1826172
93 xrho=1.1148438 1.1917969, f(xrho)=0.274103
94 Step #4 : contract - inside
95 xcc=1.0826172 1.1780273, f(xcc)=0.010387
96         > Accept xcc
97 Step #1 : order
98 Step #2 : reflect
99 xbar=1.0913086 1.1890137
100 xrho=1.0958984 1.212793, f(xrho)=0.023120
101 Step #4 : contract - outside
102 xc=1.0936035 1.2009033, f(xc)=0.011197
103         > Accept xc
104 Step #1 : order
105 Step #2 : reflect
106 xbar=1.0881104 1.1894653
107 xrho=1.0762207 1.1789307, f(xrho)=0.048574
108 Step #4 : contract - inside
109 xcc=1.0940552 1.1947327, f(xcc)=0.009341
110         > Accept xcc
111 Step #1 : order
112 Step #2 : reflect
113 xbar=1.0883362 1.18638
114 xrho=1.0830688 1.1718567, f(xrho)=0.007040
115 Step #3 : expand
116 xe=1.0778015 1.1573334, f(xe)=0.007922
117         > Accept xr
118 Step #1 : order
119 Step #2 : reflect
120 xbar=1.088562 1.1832947
121 xrho=1.0945068 1.188562, f(xrho)=0.017736
122 Step #4 : contract - inside
123 xcc=1.0855896 1.180661, f(xcc)=0.007791
124         > Accept xcc
125 Step #1 : order
126 computed = x_opt(:,1);
127 assert_close ( computed, [1;1], 1e0 );