1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2008-2009 - INRIA - Michael Baudin
3 //
4 // This file must be used under the terms of the CeCILL.
5 // This source file is licensed as described in the file COPYING, which
6 // you should have received as part of this distribution.  The terms
7 // are also available at
8 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10 mprintf("Illustrates the 2nd counter example given by Han et al.\n");
12 //
13 // han2 --
14 //   Compute the cost function from the Han Phd Thesis
15 //   which exhibits a failure of the NM method.
16 // Reference
17 //   Algorithms in Unconstrained Optimization
18 //   Han, Lixing
19 //   2000
20 //   Ph.D., The University of Connecticut
21 //
22 function [ f , index ] = han2 ( x , index )
23   if abs(x(2)) <= 1.0 then
24     rho = 0.0
25   elseif x(2) > 1.0 then
26     rho = x(2) - 1
27   else
28     rho = -x(2) - 1
29   end
30   f = x(1)^2 + rho;
31 endfunction
34 coords0 = [
35     0.    0.5
36     0.   -0.5
37     1.    0.
38 ]
41 mprintf("Creating nmplot object...\n");
42 nm = nmplot_new ();
43 nm = nmplot_configure(nm,"-numberofvariables",2);
44 nm = nmplot_configure(nm,"-function",han2);
45 nm = nmplot_configure(nm,"-x0",[1.0 1.0]');
46 nm = nmplot_configure(nm,"-maxiter",50);
47 nm = nmplot_configure(nm,"-maxfunevals",300);
48 nm = nmplot_configure(nm,"-tolfunrelative",10*%eps);
49 nm = nmplot_configure(nm,"-tolxrelative",10*%eps);
50 nm = nmplot_configure(nm,"-simplex0method","given");
51 nm = nmplot_configure(nm,"-coords0",coords0);
52 nm = nmplot_configure(nm,"-simplex0length",1.0);
53 nm = nmplot_configure(nm,"-method","variable");
54 //nm = nmplot_configure(nm,"-verbose",1);
55 nm = nmplot_configure(nm,"-verbosetermination",1);
56 //
57 // Setup output files
58 //
59 nm = nmplot_configure(nm,"-simplexfn","han2-history-simplex.txt");
60 //
61 // Perform optimization
62 //
64 nm = nmplot_search(nm);
65 nmplot_display(nm);
66 //
67 // Plot
68 //
70 [nm , xdata , ydata , zdata ] = nmplot_contour ( nm , xmin = -0.2 , xmax = 1.2 , ymin = -1.5 , ymax = 1.5 , nx = 50 , ny = 50 );
71 f = scf(100001);
72 xset("fpf"," ")
73 drawlater();
74 contour ( xdata , ydata , zdata , [0.1 0.2 0.5 1.0 1.5 1.9] )
75 nmplot_simplexhistory ( nm );
76 drawnow();
77 deletefile("han2-history-simplex.txt");
78 nm = nmplot_destroy(nm);
79 mprintf("End of demo.\n");
81 //
82 // Load this script into the editor
83 //
84 filename = 'nmplot_han2.sce';
85 dname = get_absolute_file_path(filename);
86 editor ( dname + filename );