Documentation

### This is machine translation

Mouseover text to see original. Click the button below to return to the English version of the page.

Note: This page has been translated by MathWorks. Click here to see
To view all translated materials including this page, select Country from the country navigator on the bottom of this page.

## `intlinprog` Output Function and Plot Function Syntax

### What Are Output Functions and Plot Functions?

`intlinprog` can call an output function or plot function after certain events occur in the algorithm. These events include completing a phase of the algorithm such as solving the root LP problem, adding cuts, completing a heuristic successfully, finding a new integer feasible solution during branch-and-bound, appreciably improving the relative gap, or exploring a number of nodes in a branch-and-bound tree.

### Caution

`intlinprog` output functions and plot functions differ from those in other solvers. For output functions or plot functions in other Optimization Toolbox™ solvers, see Output Function Syntax and Plot Function Syntax.

• There is one built-in output function: `savemilpsolutions`. This function collects the integer feasible points that the algorithm finds at event times. It puts the feasible points in a matrix named `xIntSol` in your base workspace, where each column is one integer feasible point. It saves the objective function values in a vector named `fIntSol`, where each entry is the objective function of the corresponding column in `xIntSol`.

• There is one built-in plot function: `optimplotmilp`. This function plots the internally-calculated bounds on the best objective function value. For an example of its use, see Factory, Warehouse, Sales Allocation Model: Solver-Based.

Call output functions or plot functions by passing the `OutputFcn` or `PlotFcn` name-value pairs, including the handle to the output function or plot function. For example,

```options = optimoptions(@intlinprog,'OutputFcn',@savemilpsolutions,'PlotFcn',@optimplotmilp); x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,options);```

If you have several output functions or plot functions, pass them as a cell array.

`options = optimoptions(@intlinprog,'OutputFcn',{@savemilpsolutions,@customFcn});`

### Custom Function Syntax

Write your own output function or plot function using this syntax:

`function stop = customFcn(x,optimValues,state)`

`intlinprog` passes the data `x`, `optimValues`, and `state` to your function.

• `stop` — Set to `true` to halt `intlinprog`. Set to `false` to allow `intlinprog` to continue.

• `x` — Either an empty matrix `[]` or an `N`-by-`1` vector that is a feasible point. `x` is nonempty only when `intlinprog` finds a new integer feasible solution. `x` can be nonempty when `phase` is `'heuristics'` or `'branching'`.

• `optimValues` — A structure whose details are in optimValues Structure.

• `state` — One of these values:

• `'init'``intlinprog` is starting. Use this state to set up any plots or data structures that you need.

• `'iter'``intlinprog` is solving the problem. Access data related to the solver’s progress. For example, plot or perform file operations.

• `'done'``intlinprog` has finished solving the problem. Close any files, finish annotating plots, etc.

For examples of writing output or plot functions, see the built-in functions `savemilpsolutions.m` or `optimplotmilp.m`.

### `optimValues` Structure

`optimValues` FieldMeaning
`phase`

Phase of the algorithm. Possible values:

• `'rootlp'``intlinprog` solved the root LP problem.

• `'cutgen'``intlinprog` added cuts and improved the lower bound.

• `'heuristics'``intlinprog` found new feasible points using heuristics.

• `'branching'``intlinprog` is creating and exploring nodes in a branch-and-bound tree.

`fval`

Best objective function found so far at an integer feasible point. When `phase` = `'rootlp'`, `fval` is the objective function value at the root node, which is not necessarily an integer feasible point.

`lowerbound`

Global lower bound of the objective function value. Empty when `phase` = `'rootlp'`.

`relativegap`

Relative gap between `lowerbound` and `fval`. Empty when `phase` = `'rootlp'` or `numfeaspoints` = `0`.

`numnodes`

Number of explored nodes. Nonzero only when `phase` = `'branching'`.

`numfeaspoints`

Number of integer feasible solutions found.

`time`

Time in seconds spent so far, measured with `tic` and `toc` from the time when `state` = `'init'`.

Watch now