主要内容

调优整数线性规划

改变改善解决方案的过程

请注意

通常,您可以更改配方的MILP使它更容易解决。建议如何改变你的配方,看到威廉姆斯[1]

在你运行intlinprog一次,你可能想要改变一些选项并重新运行它。你可能想要看到的改变包括:

  • 较低的运行时

  • 较低的最终目标函数值(一个更好的解决方案)

  • 最后小缺口

  • 不同的可行点

下面是一般建议选择变化最有可能帮助解决方案过程。试一试这个顺序的建议:

  1. 更快和更准确的解决方案,增加CutMaxIterations从其默认选项10到一个更高的数量等25。这可以加速解决方案,但也可以减缓它。

  2. 更快和更准确的解决方案,改变CutGeneration选项“中间”“高级”。这可以加速解决方案,但可以使用更多的内存,可以缓慢的解决方案。

  3. 更快和更准确的解决方案,改变IntegerPreprocess选项“高级”。这对解决方案过程有很大影响,有益的或不是。

  4. 更快和更准确的解决方案,改变RootLPAlgorithm选项“primal-simplex”。通常这种变化不是有益的,但是偶尔也可以。

  5. 试图找到更多或更好的可行点,增加了HeuristicsMaxNodes从其默认选项50到一个更高的数量等One hundred.

  6. 试图找到更多或更好的可行点,改变启发式选择,要么“中间”“高级”

  7. 试图找到更多或更好的可行点,改变BranchRule选项“strongpscost”或者,如果选择未能改善解决方案,“maxpscost”

  8. 更快的解决方案,增加了ObjectiveImprovementThreshold选择默认的零等积极的价值1的军医。然而,这种变化可能会导致intlinprog找到更少的整数可行点或不准确的解决方案。

  9. 更快地试图阻止解算器,改变RelativeGapTolerance值高于默认的选项1的军医。同样,试图获得一个更精确的答案,改变RelativeGapTolerance选择一个较低的值。这些变化并不能有效的改善结果。

一些“整数”解决方案不是整数万博 尤文图斯

通常,一些所谓的整数值组件的解决方案x (intcon)不精确的整数。intlinprog认为中所有解决方案值为整数IntegerTolerance的一个整数。

圆的所有整数是正整数,使用函数。

x (intcon) =圆(x (intcon));

谨慎

舍入可能导致解决方案变得不可行。万博 尤文图斯检查之后的可行性:

马克斯(A * x - b)%如果条目不太积极,所以有小的不可行性马克斯(abs (Aeq * x - beq))%条目是否足够接近为零马克斯(x -乌兰巴托)%积极条目违反了界限马克斯(lb - x)%积极条目违反了界限

大组件不是整数价值

intlinprog不执行解决方案组件是整数价值当他们的绝对值超过2.1 e9。当你的解决方案这样的组件,intlinprog警告你。如果你收到这个警告,检查解决方案是否应该整数值组件解决方案的接近整数。

大系数不允许

intlinprog不允许问题的组件,如系数f,一个,或乌兰巴托,超过1 e15按绝对价值。如果你尝试运行intlinprog有了这样一个问题,intlinprog一个错误的问题。

如果你得到这个错误,有时你可以问题的规模较小的系数:

  • 的系数f太大,试着增加f由一个小型积极的比例因子。

  • 为约束系数太大,试着把所有的边界和约束矩阵乘以相同的小积极的比例因子。

引用

[1]威廉姆斯,h·保罗。在数学规划模型建立,第五版。威利,2013年。