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