程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了DOCPLEX MIP 热启动大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决DOCPLEX MIP 热启动?

开发过程中遇到DOCPLEX MIP 热启动的问题如何解决?下面主要结合日常开发的经验,给出你关于DOCPLEX MIP 热启动的解决方法建议,希望对你解决DOCPLEX MIP 热启动有所启发或帮助;

我正在尝试解决一个大型 MIP 调度问题。由于解决问题需要很长时间,我想用更少的事件点运行相同的模型并找到它的第n个解决方案。使用该解决方案作为更大(更多事件点)模型的初始解决方案/种子,以找到其第 n 个解决方案,并使用它级联直到所需的事件点数量。

使用小问题的解决方案,我在 mip start 中使用它的二进制值,并让新添加的事件点不受影响。我将这些值保存在字典名称 seed_sol 中,其中键是二进制变量(在创建变量时获得),值是前一个求解的 0/1。

@H_858_7@m.add_mip_start(SolveSolution(m,seed_sol))

使用上面的代码,我可以热启动我的更大的运行。但是,当我查看输出日志时,我意识到解决方案很少有改进,而且差距非常小(我知道实际最佳解决方案要高得多)。我怀疑 'add_mip_start' 函数将解决方案值强制为我的初始种子解决方案,并试图通过仅调整新添加的二进制变量来改进解决方案。

我该如何解决这个问题以获得想要的结果?

使用:

  • Python 3.6.8
  • cplex 12.10.0.0
  • docplex 2.19.202

解决方法

warmstart 提供了一个起点,但不会减少搜索空间。

https://github.com/AlexFleischerParis/zoodocplex/blob/master/zoowarmstartapi.py 处的示例:

echo \Yii::t('app','There {n,plural,=0{are no cats} =1{is one cat} other{are # cats}}!',['n' => $n]);

你可以尝试的是固定启动

来自https://github.com/AlexFleischerParis/zoodocplex/blob/master/zoofixedstart.py的示例

// When $n = 0,it may produce "There are no cats!"
// When $n = 1,it may produce "There is one cat!"
// When $n = 42,it may produce "There are 42 cats!"
, @H_230_2@mIP 开始用作起点,但它的开始值可能会在搜索中更改,而不是固定开始,固定值被视为硬约束。 顺便说一句,您也可以使用约束实现固定开始,这有助于添加或删除这些固定开始。

然而,MIP 启动的兴趣在于初始解决方案的质量。在您的情况下,初始解决方案似乎比大问题小得多,因此可能没有太大帮助。

要评估您的 MIP 性能问题,您能否指出问题的大小(由 @H_858_7@model.print_information()) 打印) 以及 CPLEX 日志(至少是 cplex 停止的部分。)

大佬总结

以上是大佬教程为你收集整理的DOCPLEX MIP 热启动全部内容,希望文章能够帮你解决DOCPLEX MIP 热启动所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。