# optimproblem

Create optimization problem

## Description

Use `optimproblem`

to create an optimization
problem.

**Tip**

For the full workflow, see Problem-Based Optimization Workflow.

uses additional options specified by one or more `prob`

= optimproblem(`Name,Value`

)`Name,Value`

pair
arguments. For example, to specify a maximization problem instead of a minimization
problem, use ```
prob =
optimproblem('ObjectiveSense','maximize')
```

.

**Note**

All names in an optimization problem must be unique. Specifically, all variable names, objective function names, and constraint function names must be different.

## Examples

### Create Optimization Problem

Create an optimization problem with default properties.

prob = optimproblem

prob = OptimizationProblem with properties: Description: '' ObjectiveSense: 'minimize' Variables: [0x0 struct] containing 0 OptimizationVariables Objective: [0x0 OptimizationExpression] Constraints: [0x0 struct] containing 0 OptimizationConstraints No problem defined.

### Create and Solve Maximization Problem

Create a linear programming problem for maximization. The problem has two positive variables and three linear inequality constraints.

prob = optimproblem('ObjectiveSense','max');

Create positive variables. Include an objective function in the problem.

x = optimvar('x',2,1,'LowerBound',0); prob.Objective = x(1) + 2*x(2);

Create linear inequality constraints in the problem.

cons1 = x(1) + 5*x(2) <= 100; cons2 = x(1) + x(2) <= 40; cons3 = 2*x(1) + x(2)/2 <= 60; prob.Constraints.cons1 = cons1; prob.Constraints.cons2 = cons2; prob.Constraints.cons3 = cons3;

Review the problem.

show(prob)

OptimizationProblem : Solve for: x maximize : x(1) + 2*x(2) subject to cons1: x(1) + 5*x(2) <= 100 subject to cons2: x(1) + x(2) <= 40 subject to cons3: 2*x(1) + 0.5*x(2) <= 60 variable bounds: 0 <= x(1) 0 <= x(2)

Solve the problem.

sol = solve(prob);

Solving problem using linprog. Optimal solution found.

sol.x

`ans = `*2×1*
25
15

### Create and Solve Multiobjective Problem

Create a problem with two objective functions of a 2-D variable `x`

. Create the objective functions as expressions in `x`

, and place them in the objective as structures.

```
x = optimvar("x",2,LowerBound=-2,UpperBound=2);
prob = optimproblem;
prob.Objective.first = norm(x)^2;
prob.Objective.second = norm(x - [1;0])^2;
```

Solve the problem.

rng default % For reproducibility sol = solve(prob);

Solving problem using gamultiobj. Optimization terminated: average change in the spread of Pareto solutions less than options.FunctionTolerance.

Plot the solution.

paretoplot(sol)

Examine one point on the Pareto front. To do so, click the figure and click the Data Tips tool:

Then click a point on the Pareto front.

The index of the pictured point is 9. You can find the `x`

value associated with this point as the solution with index 9.

sol(9).x

`ans = `*2×1*
0.5544
-0.0306

## Input Arguments

### Name-Value Arguments

Specify optional pairs of arguments as
`Name1=Value1,...,NameN=ValueN`

, where `Name`

is
the argument name and `Value`

is the corresponding value.
Name-value arguments must appear after other arguments, but the order of the
pairs does not matter.

*
Before R2021a, use commas to separate each name and value, and enclose*
`Name`

*in quotes.*

**Example: **To specify a maximization problem, use ```
prob =
optimproblem('ObjectiveSense','maximize')
```

.

`Constraints`

— Problem constraints

`OptimizationConstraint`

array | structure with `OptimizationConstraint`

arrays as
fields

Problem constraints, specified as an `OptimizationConstraint`

array or a structure with
`OptimizationConstraint`

arrays as fields.

**Example: **```
prob = optimproblem('Constraints',sum(x,2) ==
1)
```

`Description`

— Problem label

`''`

(default) | string | character vector

Problem label, specified as a string or character vector. The software does not use
`Description`

for computation. `Description`

is an
arbitrary label that you can use for any reason. For example, you can share, archive, or
present a model or problem, and store descriptive information about the model or problem
in `Description`

.

**Example: **`"An iterative approach to the Traveling Salesman problem"`

**Data Types: **`char`

| `string`

`Objective`

— Objective function

scalar `OptimizationExpression`

| array of `OptimizationExpression`

| structure with scalar `OptimizationExpression`

as
fields

Objective function, specified as a scalar `OptimizationExpression`

object, an array of
`OptimizationExpression`

objects, or a structure
with scalar `OptimizationExpression`

as fields.

For a scalar (single-objective) problem, specify the objective function as a scalar optimization expression or as a structure with a scalar optimization expression as the value.

For a multiobjective problem, specify the objective functions as a vector-valued optimization expression, as an array of optimization expressions, or as a structure of optimization expressions. For example, this objective is a structure of optimization expressions in a scalar optimization variable

`x`

:prob = optimproblem; prob.Objective.first = x^2; prob.Objective.second = (x + 1)^2;

**Example: **```
prob =
optimproblem('Objective',sum(sum(x)))
```

for a 2-D variable
`x`

.

**Example: **`prob = optimproblem('Objective',(x-a).^2)`

where `x`

and `a`

have size 2-by-1,
and `x`

is an optimization variable.

`ObjectiveSense`

— Sense of optimization

`'minimize'`

(default) | `'min'`

| `'maximize'`

| `'max'`

| structure with the listed values as fields

Sense of optimization, specified as `'minimize'`

or
`'maximize'`

. You can also specify
`'min'`

to obtain `'minimize'`

or
`'max'`

to obtain `'maximize'`

.
The `solve`

function minimizes an objective when
`ObjectiveSense`

is `'minimize'`

and maximizes an objective when `ObjectiveSense`

is
`'maximize'`

.

`ObjectiveSense`

can be a structure with values
`'minimize'`

, `'min'`

,
`'maximize'`

, or `'max'`

. You can
use this form when the problem objective is a structure. The
`Objective`

and `ObjectiveSense`

structures should have the same field names, so the
`ObjectiveSense`

applies to the corresponding
`Objective`

. For example,

x = optimvar('x',2,"UpperBound",2,"LowerBound",-2); prob = optimproblem; prob.Objective.first = norm(x)^2; prob.Objective.second = -norm(x - [1;0])^2; prob.ObjectiveSense.first = "min"; prob.ObjectiveSense.second = "max";

If `Objective`

is a structure, you can specify
`ObjectiveSense`

as a name such as
`'max'`

. In this case, all objectives have the same
`ObjectiveSense`

.

**Example: **```
prob =
optimproblem('ObjectiveSense','max')
```

**Data Types: **`char`

| `string`

## Output Arguments

`prob`

— Optimization problem

`OptimizationProblem`

object

Optimization problem, returned as an `OptimizationProblem`

object. Typically, to complete the problem
description, you specify an objective function and constraints. However, you
can have a feasibility problem, which has no objective function, or you can
have a problem with no constraints. Solve a complete problem by calling
`solve`

.

**Warning**

The problem-based approach does not support complex values in an objective function, nonlinear equalities, or nonlinear inequalities. If a function calculation has a complex value, even as an intermediate value, the final result might be incorrect.

## Version History

**Introduced in R2017b**

## Open Example

You have a modified version of this example. Do you want to open this example with your edits?

## MATLAB Command

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list:

## How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

### Americas

- América Latina (Español)
- Canada (English)
- United States (English)

### Europe

- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)

- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)