Originally posted by: Perth2
This has some relation to this previous post.
In a column generation setting for a maximisation problem using CPLEX with Java, I have generated two new columns with a relatively small, but nevertheless positive reduced cost (both 21). These two columns are added to my restricted master problem (RMP).
If I solve the RMP in Java, neither of the two columns enter the basis. This is checked by calling
IloNumVar[] numVarArray = lpMatrix.getNumVars();
BasisStatus[] basisStatusArray = cplex.getBasisStatuses(numVarArray);
and running though the arrays to find the last two column variables. Both have BasisStatus AtLower.
I get the same result (new variables not in the basis) if I dump the model from Java into a .lp file, and its parameters to an .prm file, read both into the interactive optimiser and solve it.
I am pretty sure my pricing algorithm is correct, because I keep comparing the reduced cost I am calculating in the subproblem to generate columns with the one CPLEX calculates upon solve. The values for reduced cost are always identical.
1. Shouldn't at least one of the new columns enter the basis (with zero or non-zero value)?
If I query the values for reduced cost calculated by CPLEX, I get:
Variable Name Reduced Cost
trajectory845_SA1058_SimpleShortestPath -28209.981799
trajectory846_SA1113_SimpleShortestPath -1549.699747
2. Does this make sense at all? Or is there a bug in the pricing? Or a numerical issue with the initial reduced cost of 21?
If I save the model to an .sav file, and its parameters to a .prm file, read it into the interactive optimiser and solve it, both new variables actually do enter into the basis.
3. What could be the explanation for this difference in behaviour between Java/.lp files and .sav files? A numerical issue?
#CPLEXOptimizers#DecisionOptimization