首页 文章

SCIP使用旧代码

提问于
浏览
0

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

1 回答

  • 1

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

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

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

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

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

相关问题