0

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?

4

3 回答 3

2

还有两件事可能会影响根节点处的 LP 界限:域传播和强分支。

域传播是一种节点预处理,并试图根据当前的局部域和约束来减少变量域。强分支预先计算潜在子节点的 LP 边界,以选择一个好的变量进行分支。如果检测到其中一个子节点不可行,则缩小其域。

您可以通过设置禁用域传播

propagating/maxrounds = 0
propagating/maxroundsroot = 0

可以通过为不应用强分支的分支规则设置高优先级来禁用强分支。例如,设置

branching/pscost/priority = 100000000

为了启用纯伪成本分支。

通常,您应该检查DomReds列中非零值的统计信息。

于 2014-05-13T19:51:24.910 回答
1

您可以将内部问题写入文件,然后将其与原始文件进行比较:

SCIP> write transproblem

您还应该彻底阅读 SCIP 的统计数据,以了解 SCIP 执行了什么样的“魔法”:

SCIP> display statistics
于 2014-05-10T18:40:10.930 回答
1

我几乎忘记了线程,然后再次偶然发现它,并认为在自己找到它之后添加答案可能会很好:在 cut 回调中(不幸的是我没有提到我使用了一个)我使用了该方法:

SCIPisCutEfficacious

它丢弃了一些与获得真正的 LP 界限相关的削减。不调用此方法会减慢求解过程,但至少可以保留结果。

于 2017-06-13T09:00:10.460 回答