www.gusucode.com > globaloptim 案例源码程序 matlab代码 > globaloptim/mtwashdemo.m

    %% Pattern Search Climbs Mount Washington
%
% This example shows visually how pattern search optimizes a function. The
% function is the height of the terrain near Mount Washington, as a 
% function of the x-y location. In order to find the top of Mount
% Washington, we minimize the objective function that is the negative of 
% the height. (The Mount Washington in this example is the highest peak in the
% northeastern United States.)
%
% The US Geological Survey provides data on the height of the terrain
% as a function of the x-y location on a grid. In order to be able to
% evaluate the height at an arbitrary point, the objective function 
% interpolates the height from nearby grid points.
%
% It would be faster, of course, to simply find the maximum value of the
% height as specified on the grid, using the |max| function. The point of
% this example is to show how the pattern search algorithm operates; it works on
% functions defined over continuous regions, not just grid points. Also,
% if it is computationally expensive to evaluate the objective function,
% then performing this evaluation on a complete grid, as required by the
% |max| function, will be much less efficient than using the pattern search
% algorithm, which samples a small subset of grid points.

%   Copyright 2008-2015 The MathWorks, Inc.

%% How Pattern Search Works
%
% Pattern search finds a local minimum of an objective function by the
% following method, called polling. In this description, words describing
% pattern search quantities are in bold. The search starts at an initial
% point, which is taken as the *current point* in the first step:
%
% 1. Generate a *pattern* of points, typically plus and minus the  
% coordinate directions, times a *mesh size*, and center this pattern on
% the *current point*.
%
% 2. Evaluate the objective function at every point in the *pattern*.
%
% 3. If the minimum objective in the *pattern* is lower than the value at
% the *current point*, then the poll is *successful*, and the following
% happens:
%
% 3a. The minimum point found becomes the *current point*.
%
% 3b. The *mesh size* is doubled.
%
% 3c. The algorithm proceeds to Step 1.
%
% 4. If the poll is not *successful*, then the following happens:
%
% 4a. The *mesh size* is halved.
% 
% 4b. If the *mesh size* is below a threshold, the iterations stop.
%
% 4c. Otherwise, the *current point* is retained, and the algorithm
% proceeds at Step 1.
%
% This simple algorithm, with some minor modifications, provides a robust
% and straightforward method for optimization. It requires no gradients of
% the objective function. It lends itself to constraints, too, but this
% example and description deal only with unconstrained problems.

%% Preparing the Pattern Search
%
% To prepare the pattern search, load the data in |mtWashington.mat|, which
% contains the USGS data on a 472-by-345 grid. The elevation, Z, is given
% in feet. The vectors x and y contain the base values of the grid spacing
% in the east and north directions respectively. The data file also
% contains the starting point for the search, X0.

load mtWashington

%%
% There are three MATLAB files that perform the calculation of the objective
% function, and the plotting routines. They are:
%
% 1. |terrainfun|, which evaluates the negative of height at any x-y
% position. |terrainfun| uses the MATLAB(R) function |interp2| to perform
% two-dimensional linear interpolation. It takes the Z data and enables
% evaluation of the negative of the height at all x-y points.
%
% 2. |psoutputwashington|, which draws a 3-d rendering of Mt. Washington.
% In addition, as the run progresses, it draws spheres around each point
% that is better (higher) than previously-visited points.
%
% 3. |psplotwashington|, which draws a contour map of Mt. Washington, and
% monitors a slider that controls the speed of the run. It shows where the
% pattern search algorithm looks for optima by drawing + signs at those
% points. It also draws spheres around each point that is better than
% previously-visited points.
%
% In the example, |patternsearch| uses |terrainfun| as its objective function,
% |psoutputwashington| as an output function, and |psplotwashington| as a
% plot function. We prepare the functions to be passed to |patternsearch|
% in anonymous function syntax:

mtWashObjectiveFcn = @(xx) terrainfun(xx, x, y, Z);
mtWashOutputFcn    = @(xx,arg1,arg2) psoutputwashington(xx,arg1,arg2, x, y, Z);
mtWashPlotFcn      = @(xx,arg1) psplotwashington(xx,arg1, x, y, Z);

%% Pattern Search Options Settings
%
% Next, we create options for pattern search. This set of options has the
% algorithm halt when the mesh size shrinks below 1, keeps the mesh
% unscaled (the same size in each direction), sets the initial mesh size to
% 10, and sets the output function and plot function:

options = optimoptions(@patternsearch,'MeshTolerance',1,'ScaleMesh',false, ...
    'InitialMeshSize',10,'UseCompletePoll',true,'PlotFcn',mtWashPlotFcn, ...
    'OutputFcn',mtWashOutputFcn,'UseVectorized',true);

%% Observing the Progress of Pattern Search
%
% When you run this example you see two windows. One shows the points the
% pattern search algorithm chooses on a two-dimensional contour map of
% Mount Washington. This window has a slider that controls the delay
% between iterations of the algorithm (when it returns to Step 1 in the 
% description of how pattern search works). Set the slider to a low 
% position to speed the run, or to a high position to slow the run.
%
% The other window shows a three-dimensional plot of Mount Washington,
% along with the steps the pattern search algorithm makes. You can rotate
% this plot while the run progresses to get different views.

[xfinal ffinal] = patternsearch(mtWashObjectiveFcn,X0,[],[],[],[],[], ...
    [],[],options)

%%
% The final point, |xfinal|, shows where the pattern search algorithm
% finished; this is the x-y location of the top of Mount Washington. The 
% final objective function, |ffinal|, is the negative of the height of
% Mount Washington, 6280 feet. (This should be 6288 feet according to the
% Mount Washington Observatory).
%
% Examine the files |terrainfun.m|, |psoutputwashington.m|, and
% |psplotwashington.m| to see how the interpolation and graphics work.
%
% There are many options available for the pattern search algorithm. For
% example, the algorithm can take the first point it finds that is an
% improvement, rather than polling all the points in the pattern. It can
% poll the points in various orders. And it can use different patterns for
% the poll, both deterministic and random. Consult the Global Optimization
% Toolbox User's Guide for details.