【发布时间】:2018-08-11 11:00:10
【问题描述】:
当fval 和/或相对差距不再改善时,如何在“分支和绑定”阶段退出intlinprog?我尝试了很多选择,但到目前为止都没有成功。对于下面的示例,我知道最佳值为6834。例如,如果连续五个步骤都没有改善,我该如何实施提前停止?
nodes | total | num int | integer | relative
explored | time (s) | solution | fval | gap (%)
4980 33.87 13 6.843000e+03 1.256575e+00
54403 295.20 14 6.834000e+03 1.126554e+00
64403 347.04 14 6.834000e+03 1.126554e+00
74403 398.97 14 6.834000e+03 1.126554e+00
84403 452.28 14 6.834000e+03 1.126554e+00
94403 503.83 14 6.834000e+03 1.126554e+00
104403 557.71 14 6.834000e+03 1.126554e+00
【问题讨论】:
-
单独的改进(绝对fval)几乎没有意义(关于未来迭代中可能发生的事情)。如果您知道下限,为什么不添加边界约束或使用参数
ObjectiveCutOff?也许还可以考虑最简单的方法:使用时间限制 (MaxTime)。还要记住,步骤可能意味着很多非常不同的事情。您的输出看起来像 7 个步骤(就详细程度而言),但就访问的节点而言,也是 >104403 步骤。 -
谢谢。当然,下限一般是事先不知道的。这是一个简单的测试用例。我理解所有这些限制。限制时间是一个简单的出路,但至少在目前的情况下,在代码自行退出之前很长时间才能达到最终答案。
-
Intlinprog可以调用一个可以告诉它停止或继续的回调函数。见link。我从未使用过它,但它可能对你想做的事情有用。
标签: matlab mathematical-optimization options integer-programming mixed-integer-programming