【问题标题】:Stopping MATLAB's intlinprog early尽早停止 MATLAB 的 intlinprog
【发布时间】: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


【解决方案1】:

该算法的收敛性不仅仅取决于每次迭代的函数值,可以在options中增加函数值的容差或者尝试缩放问题。

【讨论】:

    猜你喜欢
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多