문제

I am using SCIP 3.0.2 with cplex 12.6 as LP-solver. My model requires Column generation. I already implemented it in CPLEX but since CPLEX can only do CG in the root node I am using SCIP to do Branch-and-Price. In CPLEX it turned out to be beneficial to turn off heursitics, cuts and preprocessing/probing. I set the following in SCIP:

SCIP_CALL( SCIPsetBoolParam(scip, "lp/presolving", FALSE) );

SCIPsetSeparating(scip, SCIP_PARAMSETTING_OFF, true);   //disable cuts
SCIPsetHeuristics(scip, SCIP_PARAMSETTING_OFF, true);   //disable heuristics
SCIPsetPresolving(scip, SCIP_PARAMSETTING_OFF, true);   //disable presolving

My parameter-file looks as follows:

display/primalbound/active = 1
presolving/maxrounds = 0
separating/maxrounds = 0
separating/maxroundsroot = 0
separating/maxcuts = 0
separating/maxcutsroot = 0
lp/initalgorithm = d
lp/resolvealgorithm = d
lp/fastmip = 1
lp/threads = 1
limits/time = 7200
limits/memory = 2900
limits/absgap = 0
#display/verblevel = 5
#display/freq = 10

To check that the models are the same I solved the CPLEX model in SCIP (without CG) and I obtained the same LP-bound as for the model generated with SCIP but different from the LP-bound when solving with CPLEX.

It seems that SCIP is still using some 'magic' I have not deactivated yet. So my question is what do I have to deactivate to obtain an LP-bound relying just on my model.

I already took a look at the statistics out-put and there are indeed some things that might help to solve the problem:

  1. Constraints #EnfoLP lists 1 for integral (seems strange since cuts are disabled?)
  2. The transformed problem seems to be ok. The statistics-output prints:

Presolved Problem : Problem name : t_ARLP Variables : 969 (806 binary, 0 integer, 0 implicit integer, 163 continuous) Constraints : 9311 initial, 9311 maximal

and before the iterations start I get the following:

LP Solver : row representation of the basis not available -- SCIP parameter lp/rowrepswitch has no effect transformed problem has 897 variables (806 bin, 0 int, 0 impl, 91 cont) and 9311 constraints

9311 constraints of type < linear >

presolving: presolving (0 rounds): 0 deleted vars, 0 deleted constraints, 0 added constraints, 0 tightened bounds, 0 added holes, 0 changed sides, 0 changed coefficients 0 implications, 0 cliques presolved problem has 897 variables (806 bin, 0 int, 0 impl, 91 cont) and 9311 constraints

9311 constraints of type < linear >

Presolving Time: 0.00

I added 72 columns: 91 original +72 added = 163 total. This seems to be ok.

I added the suggested parameters. It seems that domain propagation has not been in use before but there has been strong branching. Unfortunately nothing changed with the parameters.

In addition to adding the parameters I also tried to use SCIP 3.0.1 instead. This improved my bound from 670.194 to 699.203 but this is still quite different from the cplex bound with 754.348. I know that the solvers differ by a lot of numerical parameters but I guess the difference is too large to be caused by these parameters?

도움이 되었습니까?

해결책 3

I almost forgot about the thread and then stumbled upon it again and thought it might be good to add the answer after finding it myself: Within the cut callback (unfortunately I did not mention that I used one) I used the method:

SCIPisCutEfficacious

which discarded some of the cuts that are relevant to obtain a true LP bound. Not calling this method slows down the solution process but at least it preserves the result.

다른 팁

There are two further things that might affect the LP bound at the root node: domain propagation and strong branching.

Domain propagation is a sort of node preprocessing and tries to reduce variable domains based on the current local domains and constraints. Strong branching precomputes the LP bounds of potential child nodes to select a good variable to branch on. If one of the child nodes is detected to be infeasible, its domain is reduced.

You can disable domain propagation by setting

propagating/maxrounds = 0
propagating/maxroundsroot = 0

Strong branching can be disabled by setting a high priority to a branching rule which does not apply strong branching. For example, set

branching/pscost/priority = 100000000

in order to enable pure pseudo cost branching.

In general, you should check the statistics for non-zero values in the DomReds columns.

You can just write the internal problem to a file and then compare it to the original:

SCIP> write transproblem

You should also read SCIP's statistics thoroughly to find out what kind of 'magic' SCIP performed:

SCIP> display statistics
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top