I’m having trouble using the CPLEX “multimipstart” option. It seems that it does not work correctly in some situations. Please see the following small working example:
set testSet / 1 * 7 /;
integer variables
testVar(testSet) a test variable
testVar2(testSet) another test variable
;
free variables
ObjVal The objective function value
;
equations
testEq a test equation
Objective Objective function
;
Objective..
ObjVal =e= sum(testSet, testVar(testSet)) + sum(testSet, testVar2(testSet));
testEq(testSet)..
testVar(testSet) + testVar2(testSet) =l= 14.3;
model testModel
/
Objective
testEq
/;
testVar.l(testSet) = 1;
testVar2.l(testSet) = 0;
execute_unload "test.gdx", testVar.l,
testVar2.l;
$onecho > cplex.opt
mipstart=1
multimipstart=test.gdx
$offecho
testModel.optfile = 1;
solve testModel using mip maximizing ObjVal;
Running gives the following output:
Processing 2 MIP starts.
MIP start 'm1' defined solution with objective 7.0000.
MIP start 'm2' defined no solution.
1 of 2 MIP starts provided solutions.
MIP start 'm1' defined initial solution with objective 7.0000.
To me, it seems that this should not happen as the “test.gdx” file contains the exact same information that is provided using testVar.l and testVar2.l
Changing “testVar2.l(testSet) = 0;” to “testVar2.l(testSet) = 1;” and rerunning gives:
Processing 2 MIP starts.
MIP start 'm1' defined solution with objective 14.0000.
MIP start 'm2' defined solution with objective 14.0000.
2 of 2 MIP starts provided solutions.
MIP start 'm1' defined initial solution with objective 14.0000.
Can anyone provide any insight into this?