optimization: Bug #7891 fixed: neldermead had too many options
[scilab.git] / scilab / modules / optimization / tests / unit_tests / neldermead / neldermead_outputcmdobsolete.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-en.txt
10 // <-- JVM NOT MANDATORY -->
11 // <-- ENGLISH IMPOSED -->
12 // <-- NO CHECK REF -->
13 // This test is designed to produce a warning:
14 // this warning is localized.
15 // This is why we do not check the ref.
16 // Checking the ref file under Linux fails, because
17 // <-- ENGLISH IMPOSED --> has no effect there.
18 // See : http://bugzilla.scilab.org/show_bug.cgi?id=9284
19 function [ y , index ] = rosenbrock ( x , index )
20   y = 100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
21 endfunction
22 //
23 // Check backward-compatibility #1:
24 // without stop output argument.
25 //
26 function myoutputcmd3 ( state , data , mystuff )
27   global _OUTPUCMDFLAG_
28   // Unload the array, just to make sure that the minimum is there
29   iter = data.iteration
30   fc = data.funccount
31   fval = data.fval
32   x = data.x
33   simplex = data.simplex
34   // Simplex is a data structure, which can be managed
35   // by the simplex class.
36   v = optimsimplex_dirmat ( simplex )
37   condv = cond ( v )
38   _OUTPUCMDFLAG_ = mystuff.myarg
39 endfunction
40 global _OUTPUCMDFLAG_;
41 _OUTPUCMDFLAG_ = 0;
42 myobj = tlist(["T_MYSTUFF","myarg"]);
43 myobj.myarg = 12;
44 nm = neldermead_new ();
45 nm = neldermead_configure(nm,"-numberofvariables",2);
46 nm = neldermead_configure(nm,"-function",rosenbrock);
47 nm = neldermead_configure(nm,"-x0",[-1.2 1.0]');
48 nm = neldermead_configure(nm,"-maxiter",10);
49 nm = neldermead_configure(nm,"-method","variable");
50 nm = neldermead_configure(nm,"-outputcommand",list(myoutputcmd3,myobj));
51 nm = neldermead_search(nm);
52 AVERTISSEMENT : Calling sequence outputfun(state,data) is obsolete.
53 AVERTISSEMENT : Utilisez plutôt stop=outputfun(state,data) s'il vous plait.
54 AVERTISSEMENT : Cette fonctionnalité va être définitivement enlevée dans Scilab 5.4.1
55
56 iter = neldermead_get(nm,"-iterations");
57 assert_checkequal ( iter , 10 );
58 assert_checkequal ( _OUTPUCMDFLAG_ , 12 );
59 nm = neldermead_destroy(nm);
60 //
61 // Check backward-compatibility #2:
62 // obsolete use of -outputcommandarg option.
63 //
64 //
65 // myoutputcmd2 --
66 //  This command is called back by the Nelder-Mead
67 //  algorithm.
68 // Arguments
69 //  state : the current state of the algorithm
70 //    "init", "iter", "done"
71 //  data : the data at the current state
72 //    This is a tlist with the following entries:
73 //    * x : the optimal vector of parameters
74 //    * fval : the minimum function value
75 //    * simplex : the simplex, as a simplex object
76 //    * iteration : the number of iterations performed
77 //    * funccount : the number of function evaluations
78 //  myobj : a user-defined data structure
79 // stop: set to true to stop algorithm
80 //
81 function stop = myoutputcmd2 ( state , data , myobj )
82   global _OUTPUCMDFLAG_
83   // Unload the array, just to make sure that the minimum is there
84   iter = data.iteration
85   fc = data.funccount
86   fval = data.fval
87   x = data.x
88   simplex = data.simplex
89   // Simplex is a data structure, which can be managed
90   // by the simplex class.
91   v = optimsimplex_dirmat ( simplex )
92   condv = cond ( v )
93   _OUTPUCMDFLAG_ = myobj.myarg
94   stop = %f
95 endfunction
96 global _OUTPUCMDFLAG_;
97 _OUTPUCMDFLAG_ = 0;
98 myobj = tlist(["T_MYSTUFF","myarg"]);
99 myobj.myarg = 12;
100 nm = neldermead_new ();
101 nm = neldermead_configure(nm,"-numberofvariables",2);
102 nm = neldermead_configure(nm,"-function",rosenbrock);
103 nm = neldermead_configure(nm,"-x0",[-1.2 1.0]');
104 nm = neldermead_configure(nm,"-maxiter",10);
105 nm = neldermead_configure(nm,"-method","variable");
106 nm = neldermead_configure(nm,"-outputcommand",myoutputcmd2);
107 nm = neldermead_configure(nm,"-outputcommandarg",myobj);
108 AVERTISSEMENT : La fonctionnalité optimbase_configure est obsolète.
109 AVERTISSEMENT : Utilisez plutôt -outputcommand s'il vous plait.
110 AVERTISSEMENT : Cette fonctionnalité va être définitivement enlevée dans Scilab 5.4.1
111
112 nm = neldermead_search(nm);
113 iter = neldermead_get(nm,"-iterations");
114 assert_checkequal ( iter , 10 );
115 assert_checkequal ( _OUTPUCMDFLAG_ , 12 );
116 nm = neldermead_destroy(nm);