2 A simple program to test the global optimizer.
13 int testfnc, dim, axis, i;
19 cout << "Global Optimizer v0.1" << endl;
20 cout << "1. Rosenbrock (min=0)" << endl;
21 cout << "2. McCormick (min=-1.91)" << endl;
22 cout << "3. Box & Betts (min=0)" << endl;
23 cout << "4. Paviani (min=-45.7)" << endl;
24 cout << "5. Extended Beale (min=0)" << endl;
25 cout << "6. Three-hump Camel (min=0)" << endl;
26 cout << "7. Jacobsen & Pedersen (min=3)" << endl;
27 cout << "8. Poly1 (min=0)" << endl;
28 cout << "9. Six-hump Camel (min=-1.03) " << endl;
29 cout << "10. One-dimensional (min=-23.58)" << endl;
30 cout << "11. Kowalik (min=0.0003075)" << endl;
31 cout << "12. Hansen (min=-176.54)" << endl;
32 cout << "13. Shubert (min=-24.06)" << endl;
33 cout << "14. Griewank (min=0)" << endl;
34 cout << "15. Levy4 (min=-21.502)" << endl;
35 cout << "16. Levy5 (min=-11.504)" << endl;
36 cout << "17. Levy6 (min=-11.504)" << endl;
37 cout << "18. Levy7 (min=-11.504)" << endl;
38 cout << "19. Rastrigin (min=0)" << endl;
39 cout << "20. Trid" << endl;
40 cout << "21. Perm(4,50)" << endl;
41 cout << "22. Perm(4,0.5)" << endl;
42 cout << "23. Powersum(8,18,44,114)" << endl;
43 cout << "24. Schwefel (min=-12569.5)" << endl;
44 cout << "25. Shekel (-10.0)" << endl;
45 cout << endl << "Select test function :";
57 Dom=Domain_Rosenbrock;
58 Obj=Objective_Rosenbrock;
59 Grad=Gradient_Rosenbrock;
70 Obj=Objective_Jacobsen;
71 Grad=Gradient_Jacobsen;
88 Obj=Objective_Paviani;
89 Grad=Gradient_Paviani;
100 Obj=Objective_Shubert;
101 Grad=Gradient_Shubert;
106 Obj=Objective_Kowalik;
107 Grad=Gradient_Kowalik;
112 Obj=Objective_Camel6;
113 Grad=Gradient_Camel6;
117 Dom=Domain_McCormick;
118 Obj=Objective_McCormick;
119 Grad=Gradient_McCormick;
124 Obj=Objective_BoxBetts;
125 Grad=Gradient_BoxBetts;
130 Obj=Objective_Griewank;
131 Grad=Gradient_Griewank;
158 cout << "Enter problem dimension ";
162 Dom=Domain_Rastrigin;
163 Obj=Objective_Rastrigin;
164 Grad=Gradient_Rastrigin;
167 cout << "Enter problem dimension (two or larger) ";
178 Obj=Objective_Perm_4_50;
179 Grad=Gradient_Perm_4_50;
184 Obj=Objective_Perm_4_05;
185 Grad=Gradient_Perm_4_05;
190 Obj=Objective_Powersum;
191 Grad=Gradient_Powersum;
194 cout << "Enter problem dimension ";
199 Obj=Objective_Schwefel;
200 Grad=Gradient_Schwefel;
205 Obj=Objective_Shekel;
206 Grad=Gradient_Shekel;
209 cout << "Error : Function not defined" << endl;
213 cout << "Dimension=" <<dim << endl;
217 for (i=0; i<dim; i++)
218 cout << "[" << D.lb(i) << "," << D.ub(i) << "]";
219 cout << endl << endl;
222 cout << "Enter time limit (seconds) ";
223 cin >> params.maxtime;
224 if (params.maxtime<1) {
225 cout << "Warning: time limit set to 1 second\n";
228 cout << "Use factory settings (y/n) ";
229 char str[STRLEN_MAX]; cin >> str;
231 params.det_pnts=2*dim+1; params.rnd_pnts=0;
232 params.eps_cl=0.1; params.rshift=0.3;
233 params.mu=1.0E-4; AVflag=FALSE;
236 cout << "Number of deterministic points ";
237 cin >> params.det_pnts;
238 cout << "Numer of stochastic points ";
239 cin >> params.rnd_pnts;
240 cout << "Radius of attraction ";
241 cin >> params.eps_cl;
242 cout << "Parameter rshift ";
243 cin >> params.rshift;
244 cout << "Parameter mu ";
246 cout << "Use the AV initialization (y/n) ";
248 if (str[0]=='y') AVflag=TRUE; else AVflag=FALSE;
251 Global Problem(D,Obj, Grad, params);
254 cout << "Enter time limit for each coordinate direction (seconds) ";
255 cin >> params.maxtime;
256 if (params.maxtime<1) {
257 cout << "Warning: time limit set to 1 second\n";
262 Global AV(I, Obj, Grad, params);
264 x_av=0.0; AVfail=FALSE;
265 for (axis=0; axis<Problem.dim; axis++) {
266 cout << "### axis=" << axis << " ###" << endl;
267 I.lb=(D.lb)(axis); I.ub=(D.ub)(axis);
270 AV.Search(axis, x_av);
272 if (AV.NoMinimizers()) {
273 cout << "AV failed with axis=" << axis << endl;
279 AVbest=AV.GetMinValue();
280 cout << "### AV Located x=" << x_av << " fbound=" << AVbest << endl;
281 RVector AVx(Problem.dim);
284 // Use result from AV for new fbound
285 Problem.SetMinValue(AVbest);
287 // Add the best point found to the initial box (domain)
288 Problem.AddPoint(x_av, AVbest);
292 // Perform the main search
293 cout << "### Starting main search ###" << endl;
294 Problem.Search(-1, x_av);
296 cout << "Optimization terminated. Current set of minimizers is" << endl;
297 if (Problem.NoMinimizers() && AVflag==FALSE)
298 cout << "### No improvement found ###" << endl;
300 Problem.DispMinimizers();