SCIP使用旧代码

时间:2016-11-28 19:18:38

标签: scip branch-and-bound

我是SCIP的新手。我想使用SCIP作为分支和价格框架。我已经用C ++编写了这个问题,并且已经将pricer或列生成实现为函数。事实上,我已经通过将Cplex.dll链接到项目来为根节点实现BP算法,现在需要对分支树进行编码并决定使用SCIP来实现此目的。 我想知道使用SCIP和我的旧代码解决问题的最快方法是什么?或者也许使用GCG是一种更好,更快的方法? 我已阅读GCG文档,但不明白我是否应该再次实施pricer?事实上,我不明白这两者之间的区别(SCIP和GCG)。 感谢。

1 个答案:

答案 0 :(得分:1)

在GCG中,您不需要自己实施任何内容。它是分支价格的通用解算器。您必须提供紧凑的配方,即在应用Dantzig-Wolfe重新配方后导致您正在解决的主要问题的模型。重新制定还提供了定价问题的MIP公式,因此GCG可以将其解决为定价的子MIP。但是,有可能在GCG中插入定价求解器,将要通过的定价MIP将通过(目标函数对应于当前的定价轮次)。然后,定价求解器可以使用任何特定于问题的算法解决此问题,并将解决方案传递回GCG。

另一方面,在SCIP中,您创建了要解决的主要问题,并实现了一个从LP获取双值并解决相应定价问题的价格。这可能与你已经非常相似。

此外,如果您想进行分支和价格,则需要分支规则。 GCG附带一些通用的,在SCIP中你必须自己实现一个(因为分支决策必须在你的定价程序中考虑)。

总的来说,SCIP是分支和价格的框架,即它提供树管理,LP解决和更新等,但你需要自己实现一些东西,如读者,价格和分支规则。 GCG是一个通用求解器,因此您只需插入一个紧凑型模型,该模型经过重新配方并以通用方式求解。您可以通过输入文件提供重新制定,也可以尝试让GCG检测到合适的结构。你不需要实现任何东西。它已经提供了一些很好的功能,如利用重新制定的原始启发式算法,自动管理定价问题的时间等等。另一方面,与SCIP相比,例如通过定价求解器和分支规则进一步扩展它的可能性受到限制,因为你必须坚持GCG定义的结构。

我想说使用SCIP并添加你的pricer可能是更容易的方式,更类似于你已经拥有的(你不需要制定紧凑的模型)。如果您已经了解了分支应该如何工作,那么在SCIP中实现它也应该不会太难。