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// Copyright (C) 2012 - 2016 - Scilab Enterprises
6//
7// This file is hereby licensed under the terms of the GNU GPL v2.0,
8// pursuant to article 5.3.4 of the CeCILL v.2.1.
9// This file was originally licensed under the terms of the CeCILL v2.1,
10// and continues to be available under such terms.
11// For more information, see the COPYING file which you should have received
12// along with this program.
13
14
15// <-- CLI SHELL MODE -->
16// <-- ENGLISH IMPOSED -->
17
18
19function [ y , index ] = rosenbrock ( x , index )
20    y = 100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
21endfunction
22
23//
24// Test on Rosenbrock test case
25//
26
27nm = neldermead_new ();
28nm = neldermead_configure(nm,"-numberofvariables",2);
29nm = neldermead_configure(nm,"-function",rosenbrock);
30nm = neldermead_configure(nm,"-x0",[-1.2 1.0]');
31nm = neldermead_configure(nm,"-maxiter",200);
32nm = neldermead_configure(nm,"-maxfunevals",300);
33nm = neldermead_configure(nm,"-tolfunrelative",10*%eps);
34nm = neldermead_configure(nm,"-tolxrelative",10*%eps);
35nm = neldermead_configure(nm,"-tolsimplexizerelative",1.e-6);
36nm = neldermead_configure(nm,"-simplex0method","axes");
37nm = neldermead_configure(nm,"-simplex0length",1.0);
38nm = neldermead_configure(nm,"-method","variable");
39nm = neldermead_configure(nm,"-storehistory",%t);
40nm = neldermead_search(nm);
41// Check optimum point
42xopt = neldermead_get(nm,"-xopt");
43assert_checkalmostequal ( xopt , [1.0;1.0], 1e-6 );
44// Check optimum point value
45fopt = neldermead_get(nm,"-fopt");
46assert_checkalmostequal ( fopt , 0.0 , [] , 1e-6 );
47// Check function value history
48historyfopt = neldermead_get(nm,"-historyfopt");
49iterations = neldermead_get(nm,"-iterations");
50sizefopt = size(historyfopt);
51assert_checkequal ( [iterations 1], sizefopt );
52// Check number of function evaluations
53funevals = neldermead_get(nm,"-funevals");
54assert_checkequal ( (funevals < 300) , %T )
55// Check optimum history
56historyxopt = neldermead_get(nm,"-historyxopt");
57sizexopt = size(historyxopt);
58assert_checkequal ( iterations, sizexopt );
59// Check simplex history
60historysimplex = neldermead_get(nm,"-historysimplex");
61sizexsimplex = size(historysimplex);
62assert_checkequal ( [iterations 3 2], sizexsimplex );
63// Check fx0
64fx0 = neldermead_get(nm,"-fx0");
65assert_checkalmostequal ( fx0 , 24.2 , 10*%eps );
66// Check status
67status = neldermead_get(nm,"-status");
68assert_checkequal ( status , "tolsize" );
69// Cleanup
70nm = neldermead_destroy(nm);
71
72// Check that the verbose mode is functional
73// Few iterations are necessary to check this
74// Many iterations costs a lot more in time.
75nm = neldermead_new ();
76nm = neldermead_configure(nm,"-numberofvariables",2);
77nm = neldermead_configure(nm,"-function",rosenbrock);
78nm = neldermead_configure(nm,"-x0",[-1.2 1.0]');
79nm = neldermead_configure(nm,"-maxiter",5);
80nm = neldermead_configure(nm,"-maxfunevals",300);
81nm = neldermead_configure(nm,"-tolfunrelative",10*%eps);
82nm = neldermead_configure(nm,"-tolxrelative",10*%eps);
83nm = neldermead_configure(nm,"-tolsimplexizerelative",1.e-6);
84nm = neldermead_configure(nm,"-simplex0method","axes");
85nm = neldermead_configure(nm,"-simplex0length",1.0);
86nm = neldermead_configure(nm,"-method","variable");
87nm = neldermead_configure(nm,"-verbose",1);
88nm = neldermead_configure(nm,"-verbosetermination",1);
89nm = neldermead_configure(nm,"-storehistory",%t);
90nm = neldermead_search(nm, "off");
91status = neldermead_get(nm,"-status");
92assert_checkequal ( status , "maxiter" );
93nm = neldermead_destroy(nm);
94
95