Daniel,
I ran a trivial test problem (pure IP with five binary variables) and fed it two MIP starts, one optimal and one distinctly suboptimal. Here is the output (including a dump of the model):
IloModel {
IloMinimize : (1.0*San_Jose + 1.0*Detroit + 1.0*Pittsburgh + 1.0*Newark + 1.0*Fresno)
IloRange Central_Ohio : 1.0 <= (1.0*San_Jose + 1.0*Detroit + 1.0*Newark + 1.0*Fresno) <= infinity
IloRange Metro_NY : 1.0 <= (1.0*Fresno) <= infinity
IloRange SF_Oakland : 1.0 <= (1.0*Pittsburgh) <= infinity
}
CPXPARAM_MIP_Limits_Nodes 0
CPXPARAM_TimeLimit 60
2 of 2 MIP starts provided solutions.
MIP start 'opt' defined initial solution with objective 2.0000.
Tried aggregator 1 time.
MIP Presolve eliminated 3 rows and 5 columns.
All rows and columns eliminated.
Presolve time = 0.00 sec. (0.00 ticks)
Root node processing (before b&c):
Real time = 0.01 sec. (0.01 ticks)
Parallel b&c, 4 threads:
Real time = 0.00 sec. (0.00 ticks)
Sync time (average) = 0.00 sec.
Wait time (average) = 0.00 sec.
------------
Total (root+branch&cut) = 0.01 sec. (0.01 ticks)
Solver status = Optimal
Objective value = 2.0
This is the code that added the MIP starts (where x is the vector of binary variables):
mip.addMIPStart(x, new double[] {0.0, 0.0, 1.0, 0.0, 1.0},
IloCplex.MIPStartEffort.Auto, "opt");
mip.addMIPStart(x, new double[] {1.0, 0.0, 1.0, 1.0, 1.0},
IloCplex.MIPStartEffort.Auto, "subopt");
The first solution has cost 2 and is optimal; the second solution has cost 4 and is suboptimal. The output says both "provided solutions", even though the optimal solution was added first. I'm not sure how to reconcile this with what you said about the order of entry (which seems logical enough). This is with CPLEX 12.9.
Paul
#CPLEXOptimizers#DecisionOptimization