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 Commento

Matt J
Matt J il 5 Apr 2015
Modificato: Matt J il 5 Apr 2015
How about we see the code that produced it?

Accedi per commentare.

 Risposta accettata

Bo Li
Bo Li il 2 Mag 2015
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 Commento

Thanks, should have read the documentation with more attention.

Accedi per commentare.

Più risposte (1)

Alan Weiss
Alan Weiss il 6 Apr 2015
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 Commenti

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 il 12 Apr 2015
Modificato: Matt J il 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;

Accedi per commentare.

Categorie

Richiesto:

il 5 Apr 2015

Commentato:

il 2 Mag 2015

Community Treasure Hunt

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

Start Hunting!

Translated by