Fix neldermead_configure test (x0 can be a row vector).
[scilab.git] / scilab / modules / optimization / tests / unit_tests / neldermead / neldermead_configure.tst
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2008-2009 - INRIA - Michael Baudin
3 // Copyright (C) 2011 - DIGITEO - Michael Baudin
4 //
5 // This file must be used under the terms of the CeCILL.
6 // This source file is licensed as described in the file COPYING, which
7 // you should have received as part of this distribution.  The terms
8 // are also available at
9 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10
11 // <-- CLI SHELL MODE -->
12
13 //
14 // Check behaviour with configured settings.
15 //
16
17
18 function [ y , index ] = rosenbrock ( x , index )
19   y = 100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
20 endfunction
21
22 //
23 // Check maxfunevals with "variable" method
24 //
25 nm = neldermead_new ();
26 //
27 nm = neldermead_configure(nm,"-numberofvariables",2);
28 numvar = neldermead_cget(nm,"-numberofvariables");
29 assert_checkequal ( numvar , 2 );
30 //
31 nm = neldermead_configure(nm,"-x0",[1.1 1.1]');
32 x0 = neldermead_cget(nm,"-x0");
33 assert_checkequal ( x0 , [1.1 1.1]' );
34 // Check default -simplex0method
35 simplex0method = neldermead_cget(nm,"-simplex0method");
36 assert_checkequal ( simplex0method , "axes" );
37 //
38 nm = neldermead_configure(nm,"-simplex0method","spendley");
39 simplex0method = neldermead_cget(nm,"-simplex0method");
40 assert_checkequal ( simplex0method , "spendley" );
41 // Check default -simplex0length
42 simplex0length = neldermead_cget(nm,"-simplex0length");
43 assert_checkequal ( simplex0length , 1 );
44 //
45 nm = neldermead_configure(nm,"-simplex0length",0.1);
46 simplex0length = neldermead_cget(nm,"-simplex0length");
47 assert_checkequal ( simplex0length , 0.1 );
48 //
49 // Check default -method
50 method = neldermead_cget(nm,"-method");
51 assert_checkequal ( method , "variable" );
52 //
53 nm = neldermead_configure(nm,"-method","fixed");
54 method = neldermead_cget(nm,"-method");
55 assert_checkequal ( method , "fixed" );
56 //
57 nm = neldermead_configure(nm,"-method","variable");
58 method = neldermead_cget(nm,"-method");
59 assert_checkequal ( method , "variable" );
60 //
61 nm = neldermead_configure(nm,"-function",rosenbrock);
62 //
63 nm = neldermead_configure(nm,"-maxfunevals",10);
64 maxfunevals = neldermead_cget(nm,"-maxfunevals");
65 assert_checkequal ( maxfunevals , 10 );
66 //
67 nm = neldermead_search(nm);
68 funevals = neldermead_get(nm,"-funevals");
69 // Let's be not strict
70 assert_checkequal ( funevals < 15 , %T );
71 // Cleanup
72 nm = neldermead_destroy(nm);
73
74 //
75 // Check maxiter with "variable" method
76 //
77 nm = neldermead_new ();
78 nm = neldermead_configure(nm,"-numberofvariables",2);
79 nm = neldermead_configure(nm,"-x0",[1.1 1.1]');
80 nm = neldermead_configure(nm,"-simplex0method","axes");
81 nm = neldermead_configure(nm,"-simplex0length",0.1);
82 nm = neldermead_configure(nm,"-method","variable");
83 nm = neldermead_configure(nm,"-function",rosenbrock);
84 nm = neldermead_configure(nm,"-maxiter",10);
85 nm = neldermead_search(nm);
86 iterations = neldermead_get(nm,"-iterations");
87 assert_checkequal ( iterations , 10 );
88 // Cleanup
89 nm = neldermead_destroy(nm);
90
91 // Wrong -method flag
92 nm = neldermead_new ();
93 cmd = "nm = neldermead_configure(nm,''-method'',''foo'')";
94 alloptions = """fixed"" or ""variable"" or ""box"" or ""mine""";
95 assert_checkerror(cmd,"%s: Expected value [%s] for input argument %s at input #%d, but got ""%s"" instead.",[],..
96   "neldermead_configure",alloptions,"value",3,"foo");
97 nm = neldermead_destroy(nm);
98
99 // Wrong -simplex0method flag
100 nm = neldermead_new ();
101 cmd = "nm = neldermead_configure(nm,''-simplex0method'',''foo'')";
102 alloptions = """given"" or ""axes"" or ""spendley"" or ""pfeffer"" or ""randbounds""";
103 assert_checkerror(cmd,"%s: Expected value [%s] for input argument %s at input #%d, but got ""%s"" instead.",[],..
104   "neldermead_configure",alloptions,"value",3,"foo");
105 nm = neldermead_destroy(nm);
106
107 // Wrong -tolsimplexizemethod flag
108 nm = neldermead_new ();
109 cmd = "nm = neldermead_configure(nm,''-tolsimplexizemethod'',''foo'')";
110 assert_checkerror(cmd,"%s: Expected boolean but for variable %s at input #%d, got %s instead.",[],"nelmead_typeboolean","value",3,"string");
111 nm = neldermead_destroy(nm);
112
113 // Wrong -tolssizedeltafvmethod flag
114 nm = neldermead_new ();
115 cmd = "nm = neldermead_configure(nm,''-tolssizedeltafvmethod'',''foo'')";
116 assert_checkerror(cmd,"%s: Expected boolean but for variable %s at input #%d, got %s instead.",[],"nelmead_typeboolean","value",3,"string");
117 nm = neldermead_destroy(nm);
118
119 //
120 // Check wrong key for get method
121 nm = neldermead_new ();
122 nm = neldermead_configure(nm,"-numberofvariables",2);
123 nm = neldermead_configure(nm,"-x0",[1.1 1.1]');
124 nm = neldermead_configure(nm,"-simplex0method","axes");
125 nm = neldermead_configure(nm,"-simplex0length",0.1);
126 nm = neldermead_configure(nm,"-method","variable");
127 nm = neldermead_configure(nm,"-function",rosenbrock);
128 nm = neldermead_configure(nm,"-maxfunevals",2);
129 nm = neldermead_search(nm);
130 cmd = "funevals = neldermead_get(nm,''-foo'')";
131 assert_checkerror(cmd,"%s: Unknown key %s",[],"optimbase_get","-foo");
132 nm = neldermead_destroy(nm);
133
134 //
135 // Check that x0 is forced to be a vector
136 nm = neldermead_new ();
137 nm = neldermead_configure(nm,"-numberofvariables",2);
138 cmd = "nm = neldermead_configure(nm,''-x0'',[-1.2 1.0]);";
139 nm = neldermead_destroy(nm);
140
141 nm = neldermead_new ();
142 nm = neldermead_configure(nm,"-numberofvariables",2);
143 cmd = "nm = neldermead_configure(nm,''-x0'',[-1.2 1.0; 1.0 -1.2]);";
144 assert_checkerror(cmd,"%s: Wrong size for x0 argument: A vector expected.", [], "optimbase_configure");
145 nm = neldermead_destroy(nm);
146
147 //
148 // Check -restartstep
149 nm = neldermead_new ();
150 nm = neldermead_configure(nm,"-numberofvariables",2);
151 cmd = "nm = neldermead_configure(nm,''-restartstep'',[1 2 3]);";
152 assert_checkerror(cmd,"%s: The restartstep vector is expected to have %d x %d shape, but current shape is %d x %d",[],"neldermead_configure",2,1,1,3);
153 cmd = "nm = neldermead_configure(nm,''-restartstep'',[-1 2]'');";
154 assert_checkerror(cmd,"%s: Expected that all entries of input argument %s at input #%d are greater or equal than %s, but entry #%d is equal to %s.",[],..
155   "neldermead_configure","value",3,"2.22D-308",1,"-1");
156 nm = neldermead_destroy(nm);
157
158 //
159 // Check -restarteps
160 nm = neldermead_new ();
161 nm = neldermead_configure(nm,"-numberofvariables",2);
162 cmd = "nm = neldermead_configure(nm,''-restarteps'',[1 2]);";
163 assert_checkerror(cmd,"%s: Wrong size for input argument #%d: %d-by-%d matrix expected.\n",[], ..
164   "neldermead_configure",3,1,1);
165 cmd = "nm = neldermead_configure(nm,''-restarteps'',-1);";
166 assert_checkerror(cmd,"%s: Expected that all entries of input argument %s at input #%d are greater or equal than %s, but entry #%d is equal to %s.",[],..
167   "neldermead_configure","value",3,"2.22D-308",1,"-1");
168 nm = neldermead_destroy(nm);
169
170 //
171 // Check the display system
172 nm = neldermead_new ();
173 nm
174 nm = neldermead_destroy(nm);
175