Originally posted by: Seb-Seb
Hi,
I have a question concerning CPLEX 12.4 under C#:
I want to solve an MIP with CPLEX to optimality (i.e., gap = 0.0%). To help CPLEX, I want to start with an initial starting solution. There seem to be two different concepts, namely "SetVectors" as well as "AddMIPStart", and I'm not sure which one is the right one to use. Anyway, I have checked both of them:
1. method: cplex.SetVectors(values, null, variables, null, null, null);
2. method: cplex.AddMIPStart(variables, values);
where variables are of type INumVar[ ] and values are of type double[ ].
And now, here comes my problem:
Both methods seem to work. At least, CPLEX indeed starts with a solution that has the same objective value as in my given start solution. But then, CPLEX stops very quickly and claims to have found an optimal solution with this objective value. However, this cannot be true because the start solution is NOT optimal. If I solve the same MIP with CPLEX just without a given start solution, CPLEX indeed finds a strictly better solution. But with a given start solution, CPLEX returns a non-optimal solution and claims it is optimal. What happened here?
In my opinion, if gap = 0.0%, CPLEX should ALWAYS compute an optimal solution, whether I start it with a (either feasible or even non-feasible) start solution or not. But apparently, it doesn't.
Does anybody know the reason? Did I do something wrong? And, by the way, which of the above methods is the right one to start an MIP with a given solution? Thank you very much for your help!
PS: Just one more remark: In my case, the optimal objective function value might be negative, but this should not be a problem, should it? I start CPLEX with a start solution with positive objective value 61, the first lower bound provided by CPLEX is -48.000, and then it returns 61 as optimal objective value. The true optimum, however, is 57 (in a minimization problem).
#CPLEXOptimizers#DecisionOptimization