nmplot - McKinonn n1 and n2 demos : the labels on x axis were not visible.
[scilab.git] / scilab / modules / optimization / demos / neldermead / nmplot_mckinnon.sce
index c835c5b..0261c7e 100644 (file)
-// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2008-2009 - INRIA - Michael Baudin
-// Copyright (C) 2010 - DIGITEO - Allan CORNET
-// Copyright (C) 2011 - DIGITEO - Michael Baudin
-//
-// This file must be used under the terms of the CeCILL.
-// This source file is licensed as described in the file COPYING, which
-// you should have received as part of this distribution.  The terms
-// are also available at
-// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
-
-function demo_mckinnon2()
-
-  mprintf(_("Defining McKinnon function...\n"));
-  //% MCKINNON computes the McKinnon function.
-  //
-  //  Discussion:
-  //
-  //  This function has a global minimizer:
-  //
-  //    X* = ( 0.0, -0.5 ), F(X*) = -0.25
-  //
-  //  There are three parameters, TAU, THETA and PHI.
-  //
-  //  1 < TAU, then F is strictly convex.
-  //       and F has continuous first derivatives.
-  //  2 < TAU, then F has continuous second derivatives.
-  //  3 < TAU, then F has continuous third derivatives.
-  //
-  //  However, this function can cause the Nelder-Mead optimization
-  //  algorithm to "converge" to a point which is not the minimizer
-  //  of the function F.
-  //
-  //  Sample parameter values which cause problems for Nelder-Mead 
-  //  include:
-  //
-  //    TAU = 1, THETA = 15, PHI =  10;
-  //    TAU = 2, THETA =  6, PHI =  60;
-  //    TAU = 3, THETA =  6, PHI = 400;
-  //
-  //  To get the bad behavior, we also assume the initial simplex has the form
-  //
-  //    X1 = (0,0),
-  //    X2 = (1,1),
-  //    X3 = (A,B), 
-  //
-  //  where 
-  //
-  //    A = (1+sqrt(33))/8 =  0.84307...
-  //    B = (1-sqrt(33))/8 = -0.59307...
-  //
-  //  Licensing:
-  //
-  //  This code is distributed under the GNU LGPL license.
-  //
-  //  Modified:
-  //
-  //  09 February 2008
-  //
-  //  Author:
-  //
-  //  John Burkardt
-  //
-  //  Reference:
-  //
-  //  Ken McKinnon,
-  //  Convergence of the Nelder-Mead simplex method to a nonstationary point,
-  //  SIAM Journal on Optimization,
-  //  Volume 9, Number 1, 1998, pages 148-158.
-  //
-  //  Parameters:
-  //
-  //  Input, real X(2), the argument of the function.
-  //
-  //  Output, real F, the value of the function at X.
-  //
-  // Copyright (C) 2009 - INRIA - Michael Baudin, Scilab port
-
-  function [ f , index ] = mckinnon3 ( x , index )
-
-    if ( length ( x ) ~= 2 )
-      error (_('Error: function expects a two dimensional input\n'));
-    end
-
-    tau = 3.0;
-    theta = 6.0;
-    phi = 400.0;
-
-    if ( x(1) <= 0.0 )
-      f = theta * phi * abs ( x(1) ).^tau + x(2) * ( 1.0 + x(2) );
-    else
-      f = theta     *     x(1).^tau   + x(2) * ( 1.0 + x(2) );
-    end
-  endfunction
-
-
-  lambda1 = (1.0 + sqrt(33.0))/8.0;
-  lambda2 = (1.0 - sqrt(33.0))/8.0;
-  coords0 = [
-  1.0 1.0
-  0.0 0.0
-  lambda1 lambda2
-  ];
-
-
-  x0 = [1.0 1.0]';
-  mprintf(_("x0 = %s\n"),strcat(string(x0)," "));
-  mprintf(_("Creating object ...\n"));
-  nm = nmplot_new ();
-  nm = nmplot_configure(nm, "-numberofvariables",2);
-  nm = nmplot_configure(nm, "-function",mckinnon3);
-  nm = nmplot_configure(nm, "-x0",x0);
-  nm = nmplot_configure(nm, "-maxiter",200);
-  nm = nmplot_configure(nm, "-maxfunevals",300);
-  nm = nmplot_configure(nm, "-tolfunrelative",10*%eps);
-  nm = nmplot_configure(nm, "-tolxrelative",10*%eps);
-  nm = nmplot_configure(nm, "-simplex0method","given");
-  nm = nmplot_configure(nm, "-coords0",coords0);
-  //
-  // Setup output files
-  //
-  simplexfn = TMPDIR + filesep() + "history.simplex.txt";
-  fbarfn = TMPDIR + filesep() + "history.fbar.txt";
-  foptfn = TMPDIR + filesep() + "history.fopt.txt";
-  sigmafn = TMPDIR + filesep() + "history.sigma.txt";
-  nm = nmplot_configure(nm, "-simplexfn",simplexfn);
-  nm = nmplot_configure(nm, "-fbarfn",fbarfn);
-  nm = nmplot_configure(nm, "-foptfn",foptfn);
-  nm = nmplot_configure(nm, "-sigmafn",sigmafn);
-  //
-  // Perform optimization
-  //
-  mprintf(_("Searching (please wait) ...\n"));
-  nm = nmplot_search(nm);
-  disp(nm);
-  //
-  // Plot
-  //
-  mprintf(_("Plot contour (please wait) ...\n"));
-  [nm , xdata , ydata , zdata ] = nmplot_contour ( nm , xmin = -0.2 , xmax = 1.2 , ymin = -2.0 , ymax = 2.0 , nx = 50 , ny = 50 );
-  f = scf(100001);
-  xset("fpf"," ")
-  drawlater();
-  contour ( xdata , ydata , zdata , [-0.2 0.0 1.0 2.0 5.0 10.0 20.0] )
-  nmplot_simplexhistory ( nm );
-  drawnow();
-  f = scf(100002);
-  nmplot_historyplot ( nm , fbarfn , mytitle = "Function Value Average" , myxlabel = "Iterations" );
-  f = scf(100003);
-  nmplot_historyplot ( nm , foptfn , mytitle = "Minimum Function Value" , myxlabel = "Iterations" );
-  f = scf(100004);
-  nmplot_historyplot ( nm , sigmafn , mytitle = "Maximum Oriented length" , myxlabel = "Iterations" );
-  deletefile(simplexfn);
-  deletefile(fbarfn);
-  deletefile(foptfn);
-  deletefile(sigmafn);
-  nm = nmplot_destroy(nm);
-  mprintf(_("End of demo.\n"));
-
-  //
-  // Load this script into the editor
-  //
-  filename = 'nmplot_mckinnon.sce';
-  dname = get_absolute_file_path(filename);
-  editor ( dname + filename, 'readonly' );
-
-endfunction
-
-demo_mckinnon2()
-clear demo_mckinnon2;
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab\r
+// Copyright (C) 2008-2009 - INRIA - Michael Baudin\r
+// Copyright (C) 2010 - DIGITEO - Allan CORNET\r
+// Copyright (C) 2011 - DIGITEO - Michael Baudin\r
+// Copyright (C) 2012 - Scilab Enterprises - Adeline CARNIS\r
+//\r
+// This file must be used under the terms of the CeCILL.\r
+// This source file is licensed as described in the file COPYING, which\r
+// you should have received as part of this distribution.  The terms\r
+// are also available at\r
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt\r
+\r
+function demo_mckinnon2()\r
+    filename = 'nmplot_mckinnon.sce';\r
+    dname = get_absolute_file_path(filename);\r
+\r
+    mprintf(_("Defining McKinnon function...\n"));\r
+    //% MCKINNON computes the McKinnon function.\r
+    //\r
+    //  Discussion:\r
+    //\r
+    //  This function has a global minimizer:\r
+    //\r
+    //    X* = ( 0.0, -0.5 ), F(X*) = -0.25\r
+    //\r
+    //  There are three parameters, TAU, THETA and PHI.\r
+    //\r
+    //  1 < TAU, then F is strictly convex.\r
+    //       and F has continuous first derivatives.\r
+    //  2 < TAU, then F has continuous second derivatives.\r
+    //  3 < TAU, then F has continuous third derivatives.\r
+    //\r
+    //  However, this function can cause the Nelder-Mead optimization\r
+    //  algorithm to "converge" to a point which is not the minimizer\r
+    //  of the function F.\r
+    //\r
+    //  Sample parameter values which cause problems for Nelder-Mead \r
+    //  include:\r
+    //\r
+    //    TAU = 1, THETA = 15, PHI =  10;\r
+    //    TAU = 2, THETA =  6, PHI =  60;\r
+    //    TAU = 3, THETA =  6, PHI = 400;\r
+    //\r
+    //  To get the bad behavior, we also assume the initial simplex has the form\r
+    //\r
+    //    X1 = (0,0),\r
+    //    X2 = (1,1),\r
+    //    X3 = (A,B), \r
+    //\r
+    //  where \r
+    //\r
+    //    A = (1+sqrt(33))/8 =  0.84307...\r
+    //    B = (1-sqrt(33))/8 = -0.59307...\r
+    //\r
+    //  Licensing:\r
+    //\r
+    //  This code is distributed under the GNU LGPL license.\r
+    //\r
+    //  Modified:\r
+    //\r
+    //  09 February 2008\r
+    //\r
+    //  Author:\r
+    //\r
+    //  John Burkardt\r
+    //\r
+    //  Reference:\r
+    //\r
+    //  Ken McKinnon,\r
+    //  Convergence of the Nelder-Mead simplex method to a nonstationary point,\r
+    //  SIAM Journal on Optimization,\r
+    //  Volume 9, Number 1, 1998, pages 148-158.\r
+    //\r
+    //  Parameters:\r
+    //\r
+    //  Input, real X(2), the argument of the function.\r
+    //\r
+    //  Output, real F, the value of the function at X.\r
+    //\r
+    // Copyright (C) 2009 - INRIA - Michael Baudin, Scilab port\r
+\r
+    function [ f , index ] = mckinnon3 ( x , index )\r
+\r
+        if ( length ( x ) ~= 2 )\r
+            error (_('Error: function expects a two dimensional input\n'));\r
+        end\r
+\r
+        tau = 3.0;\r
+        theta = 6.0;\r
+        phi = 400.0;\r
+\r
+        if ( x(1) <= 0.0 )\r
+            f = theta * phi * abs ( x(1) ).^tau + x(2) * ( 1.0 + x(2) );\r
+        else\r
+            f = theta     *     x(1).^tau   + x(2) * ( 1.0 + x(2) );\r
+        end\r
+    endfunction\r
+    function y = mckinnon3C ( x1 , x2 )\r
+        y = mckinnon3 ( [x1 , x2] , 2 )\r
+    endfunction\r
+\r
+\r
+    lambda1 = (1.0 + sqrt(33.0))/8.0;\r
+    lambda2 = (1.0 - sqrt(33.0))/8.0;\r
+    coords0 = [\r
+    1.0 1.0\r
+    0.0 0.0\r
+    lambda1 lambda2\r
+    ];\r
+\r
+\r
+    x0 = [1.0 1.0]';\r
+    mprintf(_("x0 = %s\n"),strcat(string(x0)," "));\r
+    mprintf(_("Creating object ...\n"));\r
+    nm = nmplot_new ();\r
+    nm = nmplot_configure(nm, "-numberofvariables",2);\r
+    nm = nmplot_configure(nm, "-function",mckinnon3);\r
+    nm = nmplot_configure(nm, "-x0",x0);\r
+    nm = nmplot_configure(nm, "-maxiter",200);\r
+    nm = nmplot_configure(nm, "-maxfunevals",300);\r
+    nm = nmplot_configure(nm, "-tolfunrelative",10*%eps);\r
+    nm = nmplot_configure(nm, "-tolxrelative",10*%eps);\r
+    nm = nmplot_configure(nm, "-simplex0method","given");\r
+    nm = nmplot_configure(nm, "-coords0",coords0);\r
+    //\r
+    // Setup output files\r
+    //\r
+    simplexfn = TMPDIR + filesep() + "history.simplex.txt";\r
+    fbarfn = TMPDIR + filesep() + "history.fbar.txt";\r
+    foptfn = TMPDIR + filesep() + "history.fopt.txt";\r
+    sigmafn = TMPDIR + filesep() + "history.sigma.txt";\r
+    nm = nmplot_configure(nm, "-simplexfn",simplexfn);\r
+    nm = nmplot_configure(nm, "-fbarfn",fbarfn);\r
+    nm = nmplot_configure(nm, "-foptfn",foptfn);\r
+    nm = nmplot_configure(nm, "-sigmafn",sigmafn);\r
+    //\r
+    // Perform optimization\r
+    //\r
+    mprintf(_("Searching (please wait) ...\n"));\r
+    nm = nmplot_search(nm);\r
+    //\r
+    // Print a summary\r
+    //\r
+    exec(fullfile(dname,"nmplot_summary.sci"),-1);\r
+    nmplot_summary(nm)\r
+    //\r
+    // Plot\r
+    //\r
+    mprintf(_("Plot contour (please wait) ...\n"));\r
+    xmin = -0.2; \r
+    xmax = 1.2 ; \r
+    ymin = -2.0 ; \r
+    ymax = 2.0 ; \r
+    nx = 50 ; \r
+    ny = 50;\r
+    xdata=linspace(xmin,xmax,nx);\r
+    ydata=linspace(ymin,ymax,ny);\r
+    scf();\r
+    f = gcf();\r
+    f.axes_size = [710, 560];\r
+    subplot(2,2,1)\r
+    xset("fpf"," ")\r
+    drawlater();\r
+    contour ( xdata , ydata , mckinnon3C , [-0.2 0.0 1.0 2.0 5.0 10.0 20.0] )\r
+    nmplot_simplexhistory ( nm );\r
+    drawnow();\r
+    subplot(2,2,2)\r
+    mytitle = _("Function Value Average"); \r
+    myxlabel = _("Iterations");\r
+    nmplot_historyplot ( nm , fbarfn, mytitle , myxlabel );\r
+    subplot(2,2,3)\r
+    mytitle = _("Minimum Function Value") ; \r
+    myxlabel = _("Iterations");\r
+    nmplot_historyplot ( nm , foptfn, mytitle , myxlabel );\r
+    subplot(2,2,4)\r
+    mytitle = _("Maximum Oriented length") ; \r
+    myxlabel = _("Iterations") ;\r
+    nmplot_historyplot ( nm , sigmafn, mytitle , myxlabel );\r
+    demo_viewCode(filename);\r
+    deletefile(simplexfn);\r
+    deletefile(fbarfn);\r
+    deletefile(foptfn);\r
+    deletefile(sigmafn);\r
+    nm = nmplot_destroy(nm);\r
+    mprintf(_("End of demo.\n"));\r
+endfunction\r
+\r
+demo_mckinnon2()\r
+clear demo_mckinnon2;\r
+\r
+\r
+\r
+\r
+\r
+\r