# sdo.optimize

Solve design optimization problem

## Syntax

``[optimParam,optimInfo] = sdo.optimize(optimFcn,param)``
``[optimParam,optimInfo] = sdo.optimize(optimFcn,param,options)``
``[optimParam,optimInfo] = sdo.optimize(prob)``

## Description

Solve an optimization problem to find the values of design variables that satisfy the design requirements.

Use `sdo.optimize` to solve a design optimization problem of the following form:

Here:

• F is the cost (objective).

• p is a scalar or vector of design variables.

• Cleq and Ceq are the nonlinear inequality and equality constraints, respectively.

• A and B are the linear inequality constraints.

• Aeq and Beq are the linear equality constraints.

• lb and ub are the lower and upper bounds on p, respectively.

`sdo.optimize` can optimize continuously varying parameters and discrete-valued parameters (mixed-integer optimization). Tuning discrete-valued parameters requires Global Optimization Toolbox software.

````[optimParam,optimInfo] = sdo.optimize(optimFcn,param)` uses `fmincon`, the default optimization method, to find the parameter values `optimParam` that satisfy the requirements specified in `optimFcn`.```

example

````[optimParam,optimInfo] = sdo.optimize(optimFcn,param,options)` solves the optimization problem with the optimization options specified in `options`. Use `sdo.OptimizeOptions` to set these options.```
````[optimParam,optimInfo] = sdo.optimize(prob)` solves the optimization problem specified in a structure `prob` that contains the function to be minimized, design variables, and optimization options.```

## Examples

collapse all

Solve an optimization problem specified in `sdoExampleCostFunction`. The example cost function is included with the Simulink® Design Optimization™ software.

This example function computes the following cost:

`$\mathit{f}\left(\mathit{x}\right)={\mathit{x}}^{2}$`

The function also includes the following nonlinear and linear inequality constraints, respectively:

`${\mathit{x}}^{2}-4\mathit{x}+1\le 0$`

`$\frac{2\mathit{x}}{3}-3\le 0$`

For optimization, $\mathit{f}\left(\mathit{x}\right)$ is minimized, subject to satisfying the constraints. The example function also computes cost and constraint gradients.

Create a design variable, using an initial value of 1.

`p = param.Continuous('x',1);`

Specify default optimization options to use `fmincon` solver. For this example, to include cost and constraint gradient evaluation from `sdoExampleCostFunction`, set the `GradFcn` option to `'on'`.

```opts = sdo.OptimizeOptions; opts.GradFcn = 'on';```

Optimize the parameter.

`[pOptim,optim_info] = sdo.optimize(@(p) sdoExampleCostFunction(p),p,opts);`
``` Optimization started 31-Aug-2022 08:15:02 max First-order Iter F-count f(x) constraint Step-size optimality 0 3 1 0 1 5 0.09 0 0.7 0.59 2 6 0.0716349 0.001047 0.0324 0.0129 3 7 0.0717968 9.127e-08 0.000302 2.37e-06 Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. ```

The optimized parameter value is stored in the `Value` property of the returned `param.Continuous` object `pOptim`.

`pOptim.Value`
```ans = 0.2679 ```

## Input Arguments

collapse all

Cost function to minimize, specified as a function handle. The optimization solver calls this function during optimization.

The function requires:

• One input argument, which is a vector of parameters to be tuned, represented by `param.Continuous` objects, `param.Discrete` objects, or a mixture of both.

Note

To use discrete-valued parameters for response optimization or parameter estimation, you must use the `surrogateopt` optimization method, specified with `sdo.OptimizeOptions`.

To pass additional input arguments, use an anonymous function. For example, `new_fcn = @(p) fcn(p,arg1,arg2,...)`.

• One output argument, which is a structure with one or more of the following fields:

FieldValue
`F`

Cost (objective) evaluated at `p`. The solver minimizes `F`.

`F` is a scalar double.

`Cleq`

Nonlinear inequality constraint violations evaluated at `p`. The solver satisfies Cleq(p) ≤ 0.

Cleq is a double m-by-1 vector, where m is the number of nonlinear inequality constraints.

`Ceq`

Nonlinear equality constraint violations evaluated at `p`. The solver satisfies Ceq(p) = 0.

Ceq is a double r-by-1 vector, where r is the number of nonlinear equality constraints.

`leq`

Linear inequality constraint violations evaluated at `p`. The solver satisfies leq(p) ≤ 0.

leq is a double n-by-1 vector, where n is the number of linear inequality constraints.

`eq`

Linear equality constraint violations evaluated at `p`. The solver satisfies eq(p) = 0.

eq is a double s-by-1 vector or `[]`, where s is the number of linear equality constraints.

To specify a pure feasibility problem, omit `F` or set `F = []`. To specify a minimization problem, omit `Cleq`, `Ceq`, `leq`, and `eq`, or set their values to `[]`.

The software computes gradients of the cost and constraint violations using numeric perturbation. If you want to specify how the gradients are computed, include a second output argument and set the `GradFcn` property of `sdo.OptimizeOptions` to `'on'`. This argument must be a structure with one or more of the following fields:

FieldValue
`F`Double n-by-1 vector that contains `dF(p)/dp`, where n is the number of scalar parameters
`Cleq`Double n-by-m matrix that contains `dCleq(p)/dp`, where m is the number of nonlinear inequality constraints
`Ceq`Double n-by-r matrix that contains `dCeq(p)/dp`, where r is the number of nonlinear equality constraints

You must return the derivatives of all applicable objective and constraint violations.

Example: For an example of a cost function that you can optimize using Simulink® Design Optimization™ software, enter `edit sdoExampleCostFunction` in the MATLAB® command window.

Data Types: `function_handle`

Model parameters to optimize, specified as:

• A `param.Continuous` object, to tune a single continuously varying parameter.

• A `param.Discrete` object, to tune a single discrete-valued parameter.

• A vector containing `param.Continuous` objects, `param.Discrete` objects, or a mixture of both, to tune multiple parameters.

Use `sdo.getParameterFromModel` to obtain the parameter objects for `param`.

Note

To use discrete-valued parameters for response optimization or parameter estimation, you must use the `surrogateopt` optimization method, specified with `sdo.OptimizeOptions`.

Optimization options, specified as an object created using `sdo.OptimizeOptions`. Use this option set to specify:

• Optimization method

• Maximum number of iterations

• Tolerances

Optimization problem structure, specified as a structure with the following fields:

Field NameValue
`OptFcn`Cost function to minimize. See `optimFcn` for the input and output argument requirements of this function.
`Parameters`Model parameters to optimize, specified as `param.Continuous` or `param.Discrete` objects.
`Options`Optimization options, created with `sdo.OptimizeOptions`.

Data Types: `struct`

## Output Arguments

collapse all

Optimized parameter values, returned as a `param.Continuous` object, a `param.Discrete`, or a vector of such parameter objects. The size and composition of `optimParam` is the same as that of `param`. The optimized parameter values are stored in the `Value` property of the corresponding returned `param.Continuous` or `param.Discrete` object. To get the optimized values into your Simulink model, use `sdo.setValueInModel`.

Optimization information, returned as a structure with one or more of the following fields:

FieldValue
`F`Optimized cost (objective) value.
`Cleq`

Optimized nonlinear inequality constraint violations.

The field appears if you specify a nonlinear inequality constraint in `optimFcn`.

The value is a m-by-1 vector, where the order of the elements corresponds to the order specified in `optimFcn`. Positive values indicate that the constraint is not satisfied. Check the `exitflag` field to confirm that the optimization succeeded.

`Ceq`

Optimized nonlinear equality constraint violations.

The field appears if you specify a nonlinear equality constraint in `optimFcn`.

The value is a double r-by-1 vector, where the order of the elements corresponds to the order specified in `optimFcn`. Any nonzero values indicate that the constraint is not satisfied. Check the `exitflag` field to confirm that the optimization succeeded.

`leq`

Optimized linear inequality constraint violations.

The field appears if you specify a linear inequality constraint in `optimFcn`.

The value is a double n-by-1 vector, where the order of the elements corresponds to the order specified in `optimFcn`. Nonzero values indicate that the constraint is not satisfied. Check the `exitflag` field to confirm that the optimization succeeded.

`eq`

Optimized linear equality constraint violations.

The field appears if you specify linear equality constraints in `optimFcn`.

The value is a double s-by-1 vector, where the order of the elements corresponds to the order specified in `optimFcn`. Nonzero values indicate that the constraint is not satisfied. Check the `exitflag` field to confirm that the optimization succeeded.

`Gradients`

Cost and constraint gradients at the optimized parameter values. See How the Optimization Algorithm Formulates Minimization Problems on how the solver computes gradients.

This field appears if the solver specified in the `Method` property of `sdo.OptimizeOptions` computes gradients.

The value is a structure whose fields are dependent on `optimFcn`.

`Jacobian`

Jacobian information at the optimized parameter values.

The field appears if the solver specified in the `Method` property of `sdo.OptimizeOptions` computes Jacobians.

The value is a structure whose fields are dependent on `optimFcn`.

`exitflag`

Integer identifying the reason the algorithm terminated. See `fmincon`, `patternsearch` (Global Optimization Toolbox), `fminsearch`, and `lsqnonlin` for a list of the values and the corresponding termination reasons.

`iterations`Number of optimization iterations.
`SolverOutput`

Structure with solver-specific output information. The fields of this structure depends on the optimization solver specified in the `Method` property of `sdo.OptimizeOptions`. See `fmincon`, `patternsearch` (Global Optimization Toolbox), `fminsearch`, and `lsqnonlin` for a list of solver outputs and their description.

`Stats`

Structure that contains statistics collected during optimization, such as start and end times, number of function evaluations, and restarts.

Data Types: `struct`

## Tips

By default, the software displays the optimization information for each iteration in the MATLAB command window. To learn more about the information displayed, see:

• Iterative Display when the optimization method is specified as `'fmincon'` (default), `'fminsearch'`, or `'lsqnonlin'`

• Display to Command Window Options (Global Optimization Toolbox) when the optimization method is specified as `'patternsearch'`

You can configure the level of this display using the `MethodOptions.Display` property of an optimization option set.

## Alternative Functionality

### Apps

The Response Optimizer app provides a graphical interface to specify design requirements and optimize model parameters. For more information, see Design Optimization to Meet a Custom Objective (GUI) and Design Optimization to Track Reference Signal (GUI).

The Parameter Estimator app provides a graphical interface to specify experiments and tune model parameters so that the model output matches the experiment data. For more information, see Estimate Model Parameter Values (GUI).

## Version History

Introduced in R2011a