【问题标题】:SCIP and Branch and PriceSCIP 和分支和价格
【发布时间】:2014-07-21 21:37:05
【问题描述】:

我有一个关于 SCIP 的一般性问题。我需要使用 SCIP 作为我的问题的分支和价格框架,我用 c++ 编写代码,所以我使用 VRP 示例作为模板。在某些情况下,代码停在分数解决方案并将其作为最佳解决方案返回,我认为有问题,我是否必须设置一些参数才能告诉 SCIP 寻找整数解决方案,或者我犯了一个错误,我相信它不应该停止,而是在分数解决方案上分支,直到它到达整数解决方案(没有任何其他负降低成本列)。我还以最佳方式解决了子问题!有什么评论吗?!

【问题讨论】:

  • 您好,您能否向我们提供有关您对 VRP 示例(尤其是定价代码)所做更改的更多详细信息?此外,您的解决方案距离完整还有多远?您能否添加一些通过SCIPprintSol() 获得的 SCIP 解决方案输出?
  • 我更改了 VRP 代码并将其调整为非公制版本的无容量设施位置问题,定价器代码的主要变化与定价函数有关,我必须找到最小成本子集设施作为输入列。
  • 我还使用了一种稳定方法,每次迭代中的新对偶是先前(迭代)和当前对偶变量的凸组合。其余代码与所需的少量更改相同。主问题中的变量都是连续的
  • 我使用 SCIP 来优化解决子问题(找到设施的最小负降低成本子集)。输出解决方案:找到的解决方案:3(3 个改进)第一个解决方案:+1.90000000000000e+01(在运行 1 中,1 个节点后,0.02 秒,深度 79,由 找到)原始绑定:+0.00000000000000e+00(在运行 1,在 1 个节点后,0.02 秒,深度 0,由 找到)双边界:+0.00000000000000e+00 间隙:0.00 % 根双边界:+0.00000000000000e+00 根迭代:16
  • 在原始解决方案候选列表中存储了 3 个最佳原始解决方案 2.3s| 1 | 0 | 5 | - | 165k| 0 | - | 8 | 2 | 8 | 2 | 0 | 0 | 0 | 4.000000e+00 | 4.000000e+00 | 0.00% 2.3s| 1 | 0 | 5 | - | 165k| 0 | - | 8 | 2 | 8 | 2 | 0 | 0 | 0 | 4.000000e+00 | 4.000000e+00 | 0.00%

标签: c++ scip


【解决方案1】:

如果您将变量定义为连续变量并仅添加定价器,SCIP 将优化主问题(即解决受限主问题、添加改进列、解决更新受限主问题等,直到没有更多找到了改进的列)。

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

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

我建议实施您自己的分支规则,该规则考虑到您正在以更平衡且不会过多损害您的定价的方式进行分支和价格以及分支。例如,查看 Ryan&Foster 分支规则,这是具有集合分区主结构的二进制问题的标准。此规则在 Binpacking 以及 SCIP 附带的着色示例中实现。

还请查看 SCIP 常见问题解答,其中有一个关于分支和价格的完整部分,其中还涵盖了主题分支(特别是,如何通过约束处理程序存储和执行分支决策,这是你需要为 Ryan&Foster 分支做):http://scip.zib.de/doc/html/FAQ.php

SCIP 邮件列表上也有很多关于branch-and-price 的问题 http://listserv.zib.de/mailman/listinfo/scip/。如果要搜索,可以用google搜索“site:listserv.zib.de scip search-string”

最后,推荐大家看看 GCG 项目:http://www.or.rwth-aachen.de/gcg/ 它是 SCIP 对通用分支切割和价格求解器的扩展,即,您不需要实现任何东西,只需输入模型的原始公式,然后通过 Dantzig-Wolfe 分解重新公式化通过分店砍价解决。您可以提供重新制定的结构,定价问题作为 MIP 解决(您也这样做),并且还有不同的分支规则。 GCG 也是 SCIP 优化套件的一部分,可以在套件中轻松构建。

【讨论】:

  • 感谢您提供详尽的信息!我会努力的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多