Mixed-integer linear programming (MILP)
Mixed-integer linear programming solver.
Finds the minimum of a problem specified by
f, x, intcon, b, beq, lb, and ub are vectors, and A and Aeq are matrices.
You can specify f, intcon, lb, and ub as vectors or arrays. See Matrix Arguments.
Note
intlinprog
applies only to the solver-based approach. For a discussion
of the two optimization approaches, see First Choose Problem-Based or Solver-Based Approach.
uses a
x
= intlinprog(problem
)problem
structure to encapsulate all solver inputs. You
can import a problem
structure from an MPS file using
mpsread
. You can also create a
problem
structure from an
OptimizationProblem
object by using prob2struct
.
Often, some supposedly integer-valued components of
the solution x(intCon)
are not precisely integers. intlinprog
deems
as integers all solution values within IntegerTolerance
of
an integer.
To round all supposed integers to be exactly integers, use the round
function.
x(intcon) = round(x(intcon));
Caution
Rounding solutions can cause the solution to become infeasible. Check feasibility after rounding:
max(A*x - b) % See if entries are not too positive, so have small infeasibility max(abs(Aeq*x - beq)) % See if entries are near enough to zero max(x - ub) % Positive entries are violated bounds max(lb - x) % Positive entries are violated bounds
intlinprog
does not enforce that
solution components be integer-valued when their absolute values exceed 2.1e9
.
When your solution has such components, intlinprog
warns
you. If you receive this warning, check the solution to see whether
supposedly integer-valued components of the solution are close to
integers.
intlinprog
does not allow components
of the problem, such as coefficients in f
, A
,
or ub
, to exceed 1e25
in absolute
value. If you try to run intlinprog
with such
a problem, intlinprog
issues an error.
Currently, you cannot run intlinprog
in
the Optimization
app.
To specify binary variables, set the variables to be integers in intcon
,
and give them lower bounds of 0
and upper bounds of
1
.
Save memory by specifying sparse linear constraint
matrices A
and Aeq
. However,
you cannot use sparse matrices for b
and beq
.
If you include an
x0
argument, intlinprog
uses that value in the
'rins'
and guided diving heuristics until it finds a better
integer-feasible point. So when you provide x0
, you can obtain good results
by setting the 'Heuristics'
option to 'rins-diving'
or
another setting that uses 'rins'
.
To provide logical indices for integer components,
meaning a binary vector with 1
indicating an integer,
convert to intcon
form using find
.
For example,
logicalindices = [1,0,0,1,1,0,0]; intcon = find(logicalindices)
intcon = 1 4 5
intlinprog
replaces bintprog
.
To update old bintprog
code to use intlinprog
,
make the following changes:
Set intcon
to 1:numVars
, where
numVars
is the number of variables in
your problem.
Set lb
to zeros(numVars,1)
.
Set ub
to ones(numVars,1)
.
Update any relevant options. Use optimoptions
to
create options for intlinprog
.
Change your call to bintprog
as
follows:
[x,fval,exitflag,output] = bintprog(f,A,b,Aeq,Beq,x0,options)
% Change your call to:
[x,fval,exitflag,output] = intlinprog(f,intcon,A,b,Aeq,Beq,lb,ub,x0,options)
The Optimize Live Editor task provides a visual interface for intlinprog
.
linprog
| mpsread
| Optimize | optimoptions
| prob2struct