How to force intlinprog to give integer solution ?

The following command
x=intlinprog([0; 0; 0],[1 2 3],-[0 2 0;0 1 2;3 1 0],-[6;13;11],[],[],[0;0;0],[])
produced x=[2.6667 3 5]' which is not integer.

Answers (2)

Matt J
Matt J on 7 Nov 2015
Edited: Matt J on 7 Nov 2015
I think it's a bug. If your goal is simply to find some feasible solution to the constraints, I think you can workaround the bug with any nonzero f vector, e.g.,
>> x=intlinprog([1e-10,0,0],[1 2 3],-[0 2 0;0 1 2;3 1 0],-[6;13;11],[],[],[0;0;0],[]);
x =
0
11
1

3 Comments

Thanks for the prompt answer, but try the following real optimization:
x=intlinprog([0; 1; 0],[1 2 3],-[0 2 0;0 1 2;3 1 0],-[6;13;11],[],[],[0;0;0],[]);
This gives x=[2.6667 3 5]'. Moreover, I have no idea how to find a proper f in a bigger problem.
What is the exitflag being returned? You do not appear to be recording the exitflag so you do not know what the output represents.
Walter,
[x,y,exitflag,output]=intlinprog([0;1;0],[1 2 3],-[0 2 0;0 1 2;3 1 0],-[6;13;11],[],[],[0;0;0],[])
gives:
Optimal solution found.
Intlinprog stopped at the root node because the objective value is within a gap tolerance of the
optimal value, options.TolGapAbs = 0 (the default value). The intcon variables are
integer within tolerance, options.TolInteger = 1e-05 (the default value).
x =
2.6667
3.0000
5.0000
y =
3
exitflag =
1
output =
relativegap: 0
absolutegap: 0
numfeaspoints: 1
numnodes: 0
constrviolation: 0
message: 'Optimal solution found.…'

Sign in to comment.

Alan Weiss
Alan Weiss on 9 Nov 2015
Edited: Alan Weiss on 9 Nov 2015
I think that this must be a bug in your Optimization Toolbox™ version. Please report the issue to technical support. There might be a workaround.
Alan Weiss
MATLAB mathematical toolbox documentation

Categories

Asked:

Jan
on 7 Nov 2015

Edited:

on 9 Nov 2015

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!