Main Content

To use the `GlobalSearch`

or `MultiStart`

solvers, you must first create a problem structure. There
are two recommended ways to create a problem structure: using the
`createOptimProblem`

function and exporting from the Optimization
app.

Follow these steps to create a problem structure using the `createOptimProblem`

function.

Define your objective function as a file or anonymous function. For details, see Compute Objective Functions. If your solver is

`lsqcurvefit`

or`lsqnonlin`

, ensure the objective function returns a vector, not scalar.If relevant, create your constraints, such as bounds and nonlinear constraint functions. For details, see Write Constraints.

Create a start point. For example, to create a three-dimensional random start point

`xstart`

:xstart = randn(3,1);

(Optional) Create options using

`optimoptions`

. For example,options = optimoptions(@fmincon,'Algorithm','interior-point');

Enter

problem = createOptimProblem(

*solver*,where

is the name of your local solver:`solver`

For

`GlobalSearch`

:`'fmincon'`

For

`MultiStart`

the choices are:`'fmincon'`

`'fminunc'`

`'lsqcurvefit'`

`'lsqnonlin'`

For help choosing, see Optimization Decision Table.

Set an initial point using the

`'x0'`

parameter. If your initial point is`xstart`

, and your solver is`fmincon`

, your entry is nowproblem = createOptimProblem('fmincon','x0',xstart,

Include the function handle for your objective function in

`objective`

:problem = createOptimProblem('fmincon','x0',xstart, ... 'objective',@

*objfun*,Set bounds and other constraints as applicable.

Constraint Name lower bounds `'lb'`

upper bounds `'ub'`

matrix `Aineq`

for linear inequalities`Aineq x`

≤`bineq`

`'Aineq'`

vector `bineq`

for linear inequalities`Aineq x`

≤`bineq`

`'bineq'`

matrix `Aeq`

for linear equalities`Aeq x`

=`beq`

`'Aeq'`

vector `beq`

for linear equalities`Aeq x`

=`beq`

`'beq'`

nonlinear constraint function `'nonlcon'`

If using the

`lsqcurvefit`

local solver, include vectors of input data and response data, named`'xdata'`

and`'ydata'`

respectively.*Best practice: validate the problem structure by running your solver on the structure.*For example, if your local solver is`fmincon`

:[x,fval,eflag,output] = fmincon(problem);

This example minimizes the function from Run the Solver, subject to the constraint *x*_{1} +
2*x*_{2} ≥ 4. The objective is

sixmin = 4*x*^{2} –
2.1*x*^{4} + *x*^{6}/3
+ *xy* – 4*y*^{2} +
4*y*^{4}.

Use the `interior-point`

algorithm of `fmincon`

,
and set the start point to `[2;3]`

.

Write a function handle for the objective function.

sixmin = @(x)(4*x(1)^2 - 2.1*x(1)^4 + x(1)^6/3 ... + x(1)*x(2) - 4*x(2)^2 + 4*x(2)^4);

Write the linear constraint matrices. Change the constraint to “less than” form:

A = [-1,-2]; b = -4;

Create the local options to use the

`interior-point`

algorithm:opts = optimoptions(@fmincon,'Algorithm','interior-point');

Create the problem structure with

`createOptimProblem`

:problem = createOptimProblem('fmincon', ... 'x0',[2;3],'objective',sixmin, ... 'Aineq',A,'bineq',b,'options',opts)

The resulting structure:

problem = struct with fields: objective: @(x)(4*x(1)^2-2.1*x(1)^4+x(1)^6/3+x(1)*x(2)-4*x(2)^2+4*x(2)^4) x0: [2x1 double] Aineq: [-1 -2] bineq: -4 Aeq: [] beq: [] lb: [] ub: [] nonlcon: [] solver: 'fmincon' options: [1x1 optim.options.Fmincon]

*Best practice: validate the problem structure by running your solver on the structure:*[x,fval,eflag,output] = fmincon(problem);

Follow these steps to create a problem structure using the Optimization app.

Define your objective function as a file or anonymous function. For details, see Compute Objective Functions. If your solver is

`lsqcurvefit`

or`lsqnonlin`

, ensure the objective function returns a vector, not scalar.If relevant, create nonlinear constraint functions. For details, see Nonlinear Constraints.

Create a start point. For example, to create a three-dimensional random start point

`xstart`

:xstart = randn(3,1);

Open the Optimization app by entering

`optimtool`

at the command line, or by choosing the Optimization app from the**Apps**tab.Choose the local

**Solver**.For

`GlobalSearch`

:`fmincon`

(default).For

`MultiStart`

:`fmincon`

(default)`fminunc`

`lsqcurvefit`

`lsqnonlin`

For help choosing, see Optimization Decision Table.

Choose an appropriate

**Algorithm**. For help choosing, see Choosing the Algorithm.Set an initial point (

**Start point**).Include the function handle for your objective function in

**Objective function**, and, if applicable, include your**Nonlinear constraint function**. For example,Set bounds, linear constraints, or local

**Options**. For details on constraints, see Write Constraints.*Best practice: run the problem to verify the setup.*Choose

**File > Export to Workspace**and select**Export problem and options to a MATLAB structure named**

This example minimizes the function from Run the Solver, subject to the constraint *x*_{1} +
2*x*_{2} ≥ 4. The objective is

sixmin = 4*x*^{2} –
2.1*x*^{4} + *x*^{6}/3
+ *xy* – 4*y*^{2} +
4*y*^{4}.

Use the `interior-point`

algorithm of `fmincon`

,
and set the start point to `[2;3]`

.

Write a function handle for the objective function.

sixmin = @(x)(4*x(1)^2 - 2.1*x(1)^4 + x(1)^6/3 ... + x(1)*x(2) - 4*x(2)^2 + 4*x(2)^4);

Write the linear constraint matrices. Change the constraint to “less than” form:

A = [-1,-2]; b = -4;

Launch the Optimization app by entering

`optimtool`

at the MATLAB^{®}command line.Set the solver, algorithm, objective, start point, and constraints.

*Best practice: run the problem to verify the setup.*The problem runs successfully.

Choose

**File > Export to Workspace**and select**Export problem and options to a MATLAB structure named**