Initial Points for Global Optimization Toolbox Solvers
Some Global Optimization Toolbox solvers require an initial point x0
: patternsearch
, simulannealbnd
, GlobalSearch
, and MultiStart
. When solving optimization problems using
the problem-based approach, you specify x0
in the second argument for
solve
and for prob2struct
. To specify an initial
point, create a structure with the variable names as fields and variable values as structure
values. For example, for a scalar variable x
and a 2-by-2 matrix
y
for the patternsearch
solver, enter the following
code.
x0.x = 5; x0.y = eye(2) + 0.1*randn(2); [sol,fval] = solve(prob,x0,"Solver","patternsearch")
You can also specify an initial point for these solvers using optimvalues
, as
shown next.
Other Global Optimization Toolbox solvers do not require an initial point, but can accept an initial point or set
of initial points: ga
, gamultiobj
, paretosearch
, and
surrogateopt
. To pass
initial points to these solvers, create the points using optimvalues
.
Note
When using the problem-based approach, you cannot pass an initial point or initial population using options such as:
InitialPopulationMatrix
forga
InitialSwarmMatrix
forparticleswarm
InitialPoints
forsurrogateopt
For example, take a 2-D variable x
and a 2-by-2 matrix
y
for the ga
solver.
x = optimvar('x',2,"LowerBound",-1,"UpperBound",1); y = optimvar('y',2,2,"LowerBound",-1,"UpperBound",1); prob = optimproblem("Objective",... cosh(dot(y*x,[2;-1])) - sinh(dot(y*x,[1;-2]))); prob.Constraints = y(1,2) == y(2,1); % Set initial population: x0x for x, x0y for y rng default x0x = [1;1/2]; x0y = eye(2)/2 + 0.1*randn(2); x0 = optimvalues(prob,'x',x0x,'y',x0y); % Solve problem [sol,fval] = solve(prob,Solver="ga")
ga stopped because the average change in the fitness value is less than options.FunctionTolerance. sol = struct with fields: x: [2×1 double] y: [2×2 double] fval = -48.6317
The solution satisfies the constraint y(1,2) == y(2,1)
only to within
the constraint tolerance 1e-3
: sol.y(2,1) = -1.0000
, but
sol.y(1,2) = -0.9990
.