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 comentario

Matt J
Matt J el 5 de Abr. de 2015
Editada: Matt J el 5 de Abr. de 2015
How about we see the code that produced it?

Iniciar sesión para comentar.

 Respuesta aceptada

Bo Li
Bo Li el 2 de Mayo de 2015

1 voto

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 comentario

Roberto
Roberto el 2 de Mayo de 2015
Thanks, should have read the documentation with more attention.

Iniciar sesión para comentar.

Más respuestas (1)

Alan Weiss
Alan Weiss el 6 de Abr. de 2015

1 voto

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 comentarios

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 el 12 de Abr. de 2015
Editada: Matt J el 12 de Abr. de 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;

Iniciar sesión para comentar.

Categorías

Más información sobre Linear Programming and Mixed-Integer Linear Programming en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 5 de Abr. de 2015

Comentada:

el 2 de Mayo de 2015

Community Treasure Hunt

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

Start Hunting!

Translated by