Originally posted by: konrad86
Hello,
I am using concert to solve a maximization problem as a MIP with cplex 12.5. My program uses different types of usercut callbacks and I encounter the following behavior: When preprocessing is switched on (PreInd = 1) I obtain a worse (lower) solution than the known optimal solution for some settings. When I turn off preprocessing it works fine. My suspicion is there is some compatibility problem of usercut callbacks and preprocessing, e.g. some mapping of indices that doesn't work any more - are you aware of anything like that?
I am using a class derived from UserCutCallbackI and I add the cuts by the syntax add( IloConstraint ) to add the user cuts. The model is passed by reference to the callback and I use getValue(s) during the separation process.
I have already studied potential sources of error extensively:
-
The errors occur for different instances and in Debug as well as Release mode. I also tried cplex 12.6 without any deviation in behavior.
-
Their occurrence seems to be tied to one type of cuts. However, there will also be settings where the optimal solution is found using those cuts, so I am pretty sure there is no logical error.
-
Whenever I do not use the cut callback the correct solution is returned (with and without preprocessing)
-
The cuts are indeed user cuts, i.e. they do not cut off any feasible integer solutions. Indeed, I exported all the added cuts and manually verified they are fulfilled by the optimal solution. I also added them to the model manually and received the correct solution afterwards.
-
I studied which preprocessing settings need to be switched if I want to keep PreInd = 1
-
If Reduce is set to 0, 1 or 2 the error didn't occur, however the speed was equal to PreInd = 0
-
If PrePass is set to 0 the error didn't occur, however the solution process was not accelerated either
-
All the other settings (AggInd, BndStrenInd, CoeRedInd, RelaxPreInd and RepeatPresolve) did not affect the behavior
-
I exported the model before and after preprocessing and the .lp-files are identical
-
I added the cuts to the model in the callback (by using model.add) and the status "Unknown" occured after a while of branching with the optimal solution already being found.
I am grateful for any hints on what might be going on here.
Thank you and kind regards
Konrad
#CPLEXOptimizers#DecisionOptimization