我正在了解Benders分解,现在,我正在处理文件bendersatsp.py
。我了解在其中编程的模型(ATSP)中,不必添加可行性削减。我想看到一个玩具示例,其中有必要使用与该文件中相同的代码结构来添加可行性削减,以了解如何做到这一点。
我一直在想:
有必要在函数if
内添加新条件def separate
:
if cpx.solution.get_status() == cpx.solution.status.MIP_optimal:
可以选择吗?
非常感谢!
答案 0 :(得分:3)
我认为您错了:示例 only 分开了可行性削减。
您的想法是,插入功能separate
中以实现最优削减是正确的。但是,由于子问题是LP而非MIP,因此您将不得不检查cpx.solution.status.optimal
的状态。
Python目前没有用于此的示例代码。另一方面,仅接受教科书Benders的描述,使其与您引用的Python示例保持一致,然后自己扩展分隔,可能并不难。
在cplex/examples/src/remotec/parbenders.c
中,您有一个Benders实现,可将两种切割类型分开。此实现使用C语言实现,但可能会发现Python和C API类似,这可能会对您有所帮助。