【问题标题】:SCIP using old codeSCIP 使用旧代码
【发布时间】:2016-11-28 19:18:37
【问题描述】:

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

【问题讨论】:

  • 您看过SCIP documentation 的“入门”部分吗? starting new projects 上的页面列出了可用的编码示例。在您的情况下(C++ 中的列生成),VRP 示例可能是一个起点。

标签: scip branch-and-bound


【解决方案1】:

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

另一方面,在 SCIP 中,您创建要解决的主要问题并实施定价器,该定价器从 LP 获取对偶值并解决相应的定价问题。这可能与您已经拥有的非常相似。

另外,如果你想做分支和定价,你需要一个分支规则。 GCG 带有一些通用的,在 SCIP 中你必须自己实现一个(因为分支决策必须在你的定价过程中考虑)。

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

我会说使用 SCIP 并添加您的定价器可能是更简单的方法,并且与您已有的方法更相似(您不需要制定紧凑模型)。如果您已经知道分支应该如何工作,那么在 SCIP 中实施也不难。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多