繁体   English   中英

SCIP,分行和价格

[英]SCIP and Branch and Price

我对SCIP有一个一般性的问题。 对于我的问题,我需要使用SCIP作为“分支和价格”框架,我使用c ++编写代码,因此我将VRP示例用作模板。 在某些情况下,代码停在小数解并返回为最优解,我认为有些问题,我是否必须设置一些参数才能告诉SCIP寻找整数解,否则我就犯了一个错误,相信它不应该停止,而应该在分数解上分支,直到达到整数解(没有任何其他负的降低成本的列)。 我也可以最佳地解决子问题! 有没有推荐?

如果将变量定义为连续变量并仅添加一个定价器,则SCIP可以将主问题解决为最优(即,解决受限主问题,添加改进列,解决更新后的受限主问题,依此类推,直到不再有改进列)找到)。

SCIP没有理由检查解决方案是否为整数,因为您明确表示您不介意变量的值是否为整数(通过将它们定义为连续的)。 另一方面,如果将变量定义为整数(或二进制)类型,则SCIP将完全按照我之前的描述进行操作,但是最后检查所有整数变量是否都具有整数值,如果不是,则分支。

但是,您应该注意,SCIP中的所有分支规则都对变量进行分支,即,它们采用带小数值的整数变量并拆分其域。 在两个子节点中,二进制变量将固定为0和1。 对于分支机构和价格而言,这通常是个坏主意:首先,它非常不平衡。 您有大量的变量,最后只有几个变量的值为1,大多数变量的值为0。因此,将变量固定为1的影响很大,而将变量固定为0几乎没有影响。 但更重要的是,您需要在定价问题中考虑分支决策。 如果将变量固定为0,则必须防止定价器生成禁止列的副本(这可能会改善LP解决方案,因为它是以前的最佳解决方案的一部分)。 为此,您可能需要寻找第二(或更高的k)最佳解决方案。 由于您正在通过SCIP解决作为MIP的定价问题,因此您可能只需添加禁止此解决方案的约束(对于二进制变量使用逻辑(线性)或对于一般整数变量使用有界分离(非线性))。

我建议您实施自己的分支规则,该规则应考虑到您在进行分支和定价以及分支的方式更加平衡,并且不会对定价造成太大的影响。 例如,查看Ryan&Foster分支规则,这是使用集分区主结构进行二进制问题的标准。 此规则在装箱以及SCIP附带的着色示例中实现。

另请参阅SCIP常见问题,其中有关于分支和价格的整个部分,还涵盖了分支主题(尤其是约束处理程序如何存储和实施分支决策,这是您需要做的事情) (用于Ryan&Foster分支): http : //scip.zib.de/doc/html/FAQ.php

在SCIP邮件列表http://listserv.zib.de/mailman/listinfo/scip/上,还有很多关于分支和价格的问题。 如果要搜索,可以使用google并搜索“ site:listserv.zib.de scip搜索字符串”

最后,我想建议您看一下GCG项目: http : //www.or.rwth-aachen.de/gcg/这是SCIP扩展到通用的“分支降价”解决方案,也就是说,您无需执行任何操作,只需输入模型的原始公式,然后通过Dantzig-Wolfe分解将其重新公式化,然后通过“分支割价”进行求解。 您可以提供重新构造的结构,可以通过MIP解决定价问题(您也可以这样做),并且还有不同的分支规则。 GCG也是SCIP优化套件的一部分,可以在套件中轻松构建。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM