Intlinprog does not retun integer solution

I'se setup a problem for intlinprog, solutions are constrained to be binary:
lb =
0 0 0 0 0 0 0 0 0
ub =
1 1 1 1 1 1 1 1 1
However this is what I get when I run intlingprog:
LP: Optimal objective value is 6.000000.
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).
ans =
0.5000 0.5000 0 0 0.5000 0.5000 0 0 0
Which is clearly a not integer solution within the tollerance.
What am I missing?

1 Kommentar

Matt J
Matt J am 5 Apr. 2015
Bearbeitet: Matt J am 5 Apr. 2015
How about we see the code that produced it?

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Bo Li
Bo Li am 2 Mai 2015

1 Stimme

Yes, the INTCON parameter is very important to constrain the value of the variables to be integer. It does NOT mean the number of integer, but means the integer constraints. I made the same mistake.
See what it is explained:
intcon — Vector of integer constraints vector of integers Vector of integer constraints, specified as a vector of positive integers. The values in intcon indicate the components of the decision variable x that are integer-valued. intcon has values from 1 through numel(f).
intcon can also be an array. Internally, intlinprog converts an array intcon to the vector intcon(:).
Example: intcon = [1,2,7] means x(1), x(2), and x(7) take only integer values.

1 Kommentar

Roberto
Roberto am 2 Mai 2015
Thanks, should have read the documentation with more attention.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Alan Weiss
Alan Weiss am 6 Apr. 2015

1 Stimme

Without seeing your intlinprog call, I can only guess that you neglected to include an intcon vector of the requisite length.
Alan Weiss
MATLAB mathematical toolbox documentation

2 Kommentare

This is the entire problem:
f =
3 3 3 3 3 3 0 0 3 3 0 0 3 3 3 3 3 3
intcon =
18
A =
2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2
b =
10 10 0 1 1 1 0 100 0 100 100 100
Aeq =
1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0
1 -1 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0
-1 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0
0 0 1 -1 0 0 0 0 0 0 0 0 -1 0 0 0 1 0
0 0 -1 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 1
0 0 0 0 1 -1 0 0 1 0 0 0 1 0 -1 0 -1 0
0 0 0 0 -1 1 0 0 0 1 0 0 0 1 0 -1 0 -1
beq =
1 1 0 0 0 0 0 0
lb =
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ub =
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
and this is the output of
intlinprog(f,intcon,A,b,Aeq,beq,lb,ub);
LP: Optimal objective value is 6.000000.
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).
ans =
0.5000 0.5000 0.5000 0.5000 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Matt J
Matt J am 12 Apr. 2015
Bearbeitet: Matt J am 12 Apr. 2015
As Alan guessed, you are interpreting intcon incorrectly. Setting intcon=18 means that you are requiring only x(18) to be integer-valued. You should really have
intcon=1:18;

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Linear Programming and Mixed-Integer Linear Programming finden Sie in Hilfe-Center und File Exchange

Tags

Gefragt:

am 5 Apr. 2015

Kommentiert:

am 2 Mai 2015

Community Treasure Hunt

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

Start Hunting!

Translated by