Fix test in optimization module: test_run('optimization', 'optimbase_checkcostfun')
[scilab.git] / scilab / modules / optimization / tests / unit_tests / optimbase / optimbase_checkcostfun.dia.ref
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 // <-- CLI SHELL MODE -->
11 //
12 // Here, the cost function is OK
13 //
14 function [ y , index ] = rosenbrockOk ( x , index )
15   y = 100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
16 endfunction
17 opt = optimbase_new ();
18 opt = optimbase_configure(opt,"-numberofvariables",2);
19 opt = optimbase_configure(opt,"-x0",[1.1 1.1]');
20 opt = optimbase_configure(opt,"-function",rosenbrockOk);
21 opt = optimbase_checkcostfun(opt);
22 opt = optimbase_destroy(opt);
23 //
24 // Here, the cost function is not callable
25 //
26 function [ y , index ] = rosenbrock2 ( x , index )
27   y = fdsmklqfjdsf;
28 endfunction
29 opt = optimbase_new ();
30 opt = optimbase_configure(opt,"-numberofvariables",2);
31 opt = optimbase_configure(opt,"-x0",[1.1 1.1]');
32 opt = optimbase_configure(opt,"-function",rosenbrock2);
33 cmd = "opt = optimbase_checkcostfun(opt);";
34 lclmsg = "%s: Cannot evaluate cost function with ""%s"": %s";
35 scimsg = msprintf(_("Undefined variable: %s\n"), "fdsmklqfjdsf");
36 assert_checkerror(cmd,lclmsg,[],"optimbase_checkcostfun","[f,index]=costf(x0,1)", scimsg);
37 opt = optimbase_destroy(opt);
38 //
39 // Here, the cost function is callable, but returns a matrix,
40 // instead of a scalar.
41 //
42 function [ y , index ] = rosenbrock3 ( x , index )
43   y = ones(10,10);
44 endfunction
45 opt = optimbase_new ();
46 opt = optimbase_configure(opt,"-numberofvariables",2);
47 opt = optimbase_configure(opt,"-x0",[1.1 1.1]');
48 opt = optimbase_configure(opt,"-function",rosenbrock3);
49 cmd = "opt = optimbase_checkcostfun(opt);";
50 assert_checkerror(cmd,"%s: The matrix %s from costf(x0,%d) has %d rows, instead of %d.",[],"optimbase_checkcostfun","f",2,10,1);
51 opt = optimbase_destroy(opt);
52 //
53 // Test with good non linear constraints
54 //
55 function [ f , c , index ] = optimtestcase ( x , index )
56   f = []
57   c = []
58   if ( index == 2 | index == 6 ) then
59     f = x(1)^2 + x(2)^2 + 2.0 * x(3)^2 + x(4)^2 ...
60       - 5.0 * x(1) - 5.0 * x(2) - 21.0 * x(3) + 7.0 * x(4)
61   end
62   if ( index == 5 | index == 6 ) then
63     c1 = - x(1)^2 - x(2)^2 - x(3)^2 - x(4)^2 ...
64               - x(1) + x(2) - x(3) + x(4) + 8
65     c2 = - x(1)^2 - 2.0 * x(2)^2 - x(3)^2 - 2.0 * x(4)^2 ...
66               + x(1) + x(4) + 10.0
67     c3 = - 2.0 * x(1)^2 - x(2)^2 - x(3)^2 - 2.0 * x(1) ...
68               + x(2) + x(4) + 5.0
69     c = [c1 c2 c3]
70   end
71 endfunction
72 opt = optimbase_new ();
73 opt = optimbase_configure(opt,"-numberofvariables",4);
74 opt = optimbase_configure(opt,"-function",optimtestcase);
75 opt = optimbase_configure(opt,"-x0",[0.0 0.0 0.0 0.0]');
76 opt = optimbase_configure(opt,"-nbineqconst",3);
77 opt = optimbase_checkcostfun(opt);
78 opt = optimbase_destroy(opt);
79 //
80 // Test a wrong configuration: we forgot to configure "-nbineqconst"
81 //
82 opt = optimbase_new ();
83 opt = optimbase_configure(opt,"-numberofvariables",4);
84 opt = optimbase_configure(opt,"-function",optimtestcase);
85 opt = optimbase_configure(opt,"-x0",[0.0 0.0 0.0 0.0]');
86 cmd="opt = optimbase_checkcostfun(opt)";
87 errmsg = "%s: The matrix %s from costf(x0,%d) has %d rows, instead of %d.";
88 assert_checkerror(cmd,errmsg,[], "optimbase_checkcostfun" , "index" , 1 , 0 , 1);
89 opt = optimbase_destroy(opt);
90 //
91 // Test with wrong  non linear constraints f(x0,2) is not a row vector
92 // The cost function transposes the column vector.
93 //
94 function [ f , c , index ] = optimtestcase2 ( x , index )
95   f = []
96   c = []
97   if ( index == 2 | index == 6 ) then
98     f = x(1)^2 + x(2)^2 + 2.0 * x(3)^2 + x(4)^2 ...
99       - 5.0 * x(1) - 5.0 * x(2) - 21.0 * x(3) + 7.0 * x(4)
100   end
101   if ( index == 5 | index == 6 ) then
102     c1 = - x(1)^2 - x(2)^2 - x(3)^2 - x(4)^2 ...
103               - x(1) + x(2) - x(3) + x(4) + 8
104     c2 = - x(1)^2 - 2.0 * x(2)^2 - x(3)^2 - 2.0 * x(4)^2 ...
105               + x(1) + x(4) + 10.0
106     c3 = - 2.0 * x(1)^2 - x(2)^2 - x(3)^2 - 2.0 * x(1) ...
107               + x(2) + x(4) + 5.0
108     c = [c1 c2 c3].'
109   end
110 endfunction
111 opt = optimbase_new ();
112 opt = optimbase_configure(opt,"-numberofvariables",4);
113 opt = optimbase_configure(opt,"-function",optimtestcase2);
114 opt = optimbase_configure(opt,"-x0",[0.0 0.0 0.0 0.0]');
115 opt = optimbase_configure(opt,"-nbineqconst",3);
116 opt = optimbase_checkcostfun(opt);
117 opt = optimbase_destroy(opt);
118 //
119 // Test with wrong  non linear constraints f(x0,2) is a row vector with 5 components instead of 3
120 //
121 function [ f , c , index ] = optimtestcase3 ( x , index )
122   f = []
123   c = []
124   if ( index == 2 | index == 6 ) then
125     f = x(1)^2 + x(2)^2 + 2.0 * x(3)^2 + x(4)^2 ...
126       - 5.0 * x(1) - 5.0 * x(2) - 21.0 * x(3) + 7.0 * x(4)
127   end
128   if ( index == 5 | index == 6 ) then
129     c1 = - x(1)^2 - x(2)^2 - x(3)^2 - x(4)^2 ...
130               - x(1) + x(2) - x(3) + x(4) + 8
131     c2 = - x(1)^2 - 2.0 * x(2)^2 - x(3)^2 - 2.0 * x(4)^2 ...
132               + x(1) + x(4) + 10.0
133     c3 = - 2.0 * x(1)^2 - x(2)^2 - x(3)^2 - 2.0 * x(1) ...
134               + x(2) + x(4) + 5.0
135     c = [c1 c2 c3 0.0 0.0]
136   end
137 endfunction
138 opt = optimbase_new ();
139 opt = optimbase_configure(opt,"-numberofvariables",4);
140 opt = optimbase_configure(opt,"-function",optimtestcase3);
141 opt = optimbase_configure(opt,"-x0",[0.0 0.0 0.0 0.0]');
142 opt = optimbase_configure(opt,"-nbineqconst",3);
143 cmd = "opt = optimbase_checkcostfun(opt);";
144 assert_checkerror(cmd,"%s: The matrix %s from costf(x0,%d) has %d columns, instead of %d.",[],"optimbase_checkcostfun","c",5,5,3);
145 opt = optimbase_destroy(opt);
146 //
147 // Test with wrong  non linear constraints f(x0,3) is a column vector
148 // The cost function transposes the column vector.
149 //
150 function [ f , c , index ] = optimtestcase4 ( x , index )
151   f = []
152   c = []
153   if ( index == 2 | index == 6 ) then
154     f = x(1)^2 + x(2)^2 + 2.0 * x(3)^2 + x(4)^2 ...
155       - 5.0 * x(1) - 5.0 * x(2) - 21.0 * x(3) + 7.0 * x(4)
156   end
157   if ( index == 5 | index == 6 ) then
158     c1 = - x(1)^2 - x(2)^2 - x(3)^2 - x(4)^2 ...
159               - x(1) + x(2) - x(3) + x(4) + 8
160     c2 = - x(1)^2 - 2.0 * x(2)^2 - x(3)^2 - 2.0 * x(4)^2 ...
161               + x(1) + x(4) + 10.0
162     c3 = - 2.0 * x(1)^2 - x(2)^2 - x(3)^2 - 2.0 * x(1) ...
163               + x(2) + x(4) + 5.0
164     c = [c1 c2 c3].'
165   end
166 endfunction
167 opt = optimbase_new ();
168 opt = optimbase_configure(opt,"-numberofvariables",4);
169 opt = optimbase_configure(opt,"-function",optimtestcase4);
170 opt = optimbase_configure(opt,"-x0",[0.0 0.0 0.0 0.0]');
171 opt = optimbase_configure(opt,"-nbineqconst",3);
172 opt = optimbase_checkcostfun(opt);
173 opt = optimbase_destroy(opt);
174 //
175 // Test with wrong  non linear constraints f(x0,3) is a row vector with 5 columns instead of 4
176 //
177 function [ f , c , index ] = optimtestcase5 ( x , index )
178   f = []
179   c = []
180   if ( index == 2 | index == 6 ) then
181     f = x(1)^2 + x(2)^2 + 2.0 * x(3)^2 + x(4)^2 ...
182       - 5.0 * x(1) - 5.0 * x(2) - 21.0 * x(3) + 7.0 * x(4)
183   end
184   if ( index == 5 | index == 6 ) then
185     c1 = - x(1)^2 - x(2)^2 - x(3)^2 - x(4)^2 ...
186               - x(1) + x(2) - x(3) + x(4) + 8
187     c2 = - x(1)^2 - 2.0 * x(2)^2 - x(3)^2 - 2.0 * x(4)^2 ...
188               + x(1) + x(4) + 10.0
189     c3 = - 2.0 * x(1)^2 - x(2)^2 - x(3)^2 - 2.0 * x(1) ...
190               + x(2) + x(4) + 5.0
191     c = [c1 c2 c3 0.0]
192   end
193 endfunction
194 opt = optimbase_new ();
195 opt = optimbase_configure(opt,"-numberofvariables",4);
196 opt = optimbase_configure(opt,"-function",optimtestcase5);
197 opt = optimbase_configure(opt,"-x0",[0.0 0.0 0.0 0.0]');
198 opt = optimbase_configure(opt,"-nbineqconst",3);
199 cmd = "opt = optimbase_checkcostfun(opt);";
200 assert_checkerror(cmd,"%s: The matrix %s from costf(x0,%d) has %d columns, instead of %d.",[],"optimbase_checkcostfun","c",5,4,3);
201 opt = optimbase_destroy(opt);
202 //
203 // Test with correct rosenbrock function
204 //
205 function [ f , g , index ] = rosenbrock ( x , index )
206   f = 100.0 *(x(2)-x(1)^2)^2 + (1-x(1))^2;
207   g(1,1) = - 400. * ( x(2) - x(1)**2 ) * x(1) -2. * ( 1. - x(1) )
208   g(1,2) = 200. * ( x(2) - x(1)**2 )
209 endfunction
210 opt = optimbase_new ();
211 opt = optimbase_configure(opt,"-numberofvariables",2);
212 opt = optimbase_configure(opt,"-function", rosenbrock );
213 opt = optimbase_configure(opt,"-withderivatives",%t);
214 opt = optimbase_configure(opt,"-x0",[-1.2 1.0].');
215 opt = optimbase_checkcostfun(opt);
216 opt = optimbase_destroy(opt);
217 //
218 // Test with not correct rosenbrock function : g is a column vector instead of row vector
219 // The cost function transposes the column vector.
220 function [ f , g , index ] = rosenbrock4 ( x , index )
221   f = 100.0 *(x(2)-x(1)^2)^2 + (1-x(1))^2;
222   g(1) = - 400. * ( x(2) - x(1)**2 ) * x(1) -2. * ( 1. - x(1) )
223   g(2) = 200. * ( x(2) - x(1)**2 )
224 endfunction
225 opt = optimbase_new ();
226 opt = optimbase_configure(opt,"-numberofvariables",2);
227 opt = optimbase_configure(opt,"-function", rosenbrock4 );
228 opt = optimbase_configure(opt,"-withderivatives",%t);
229 opt = optimbase_configure(opt,"-x0",[-1.2 1.0].');
230 opt = optimbase_checkcostfun(opt);
231 opt = optimbase_destroy(opt);