【问题标题】:Branch-and-price using SCIP使用 SCIP 进行分支定价
【发布时间】:2020-02-07 21:35:04
【问题描述】:

我目前正在尝试在 Windows 上的 Python 分支和价格框架中实现一个通用护士排班问题 (NRP)。

我尝试使用 Gurobi,但显然不可能,请参阅讨论: https://support.gurobi.com/hc/en-us/community/posts/360043240312-Branch-and-price-example

我正在搜索一个关于如何在 Python 中使用 SCIP 设置分支和价格框架的小示例 - 开始使用。我只能在 C 和 C++ 中找到示例,这些都是我不熟悉的语言。

【问题讨论】:

  • 需要使用分店和价格方法吗?现代求解器通常可以直接解决广泛(完整)形式的问题,而无需使用像这样的迭代方法。您能详细介绍一下您要解决的问题吗?
  • 不一定,但我想。一个优点是我可以自己确定分支规则,而我不知道在不同的求解器中使用了哪些启发式和切割规则。本文描述了我试图解决的问题:sciencedirect.com/science/article/abs/pii/S0377221713002464 但我想添加额外的约束(我还没有决定哪些约束)
  • 我的第一个猜测是您不会从标准求解器中获得细粒度的控制。您可能需要用 Python 或 C 编写整个算法。但您可以通过在 Python 中添加列然后让求解器运行完成(其正常模式)(可能是热启动)来获得类似的结果。或者,您可以通过创建一个在基础中包含新列的热启动来更接近您想要的结果,然后运行求解器并限制迭代次数。我之前尝试过,但没有检查它是否确定性地旋转新列。

标签: python scipy scip


【解决方案1】:

请看PySCIPOpt,这是 SCIP 的 Python 接口。您可以在PySCIPOpt/tests/test_pricer.py 中找到一个基于列生成的切削库存问题示例。不过,我还是建议您查看Binpacking example of SCIP

【讨论】:

  • 这不是我正在搜索的列生成方法。就是branch-and-price,如何使用SCIP构建搜索树和添加分支规则。
  • 要实现您自己的分支定价算法,您需要编写一个定价器来生成新列和一个分支规则。正如我所写的,test_pricer.py 中显示了如何生成和添加列的示例。 test_branch_probing_lp.py 中显示了编写分支规则的示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
相关资源
最近更新 更多