Main Content

## `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 and Plot Function Syntax and Plot Functions.

• 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`. The relative gap is a percentage from 0 to 100, exactly as in the `output` argument. 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'`.

Download now