主要内容

调整整数线性规划

更改选项以改进解决方案过程

笔记

通常,您可以改变MILP的公式,使其更容易求解。关于如何改变你的提法的建议,请参阅Williams[1]

你跑后intlinprog.一旦,您可能希望更改一些选项并重新运行它。您可能想要查看的更改包括:

  • 较低的运行时间

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

  • 较小的最终差距

  • 更多或不同的可行点

以下是最有可能帮助解决方案过程的选项变更的一般性建议。按此顺序尝试建议:

  1. 为了更快,更准确的解决方案,增加削减选项从其默认值10.到较高的数字,如25.。这可以加快解决方案,但也可以慢速速度。

  2. 为了更快更准确的解决方案,改变CutGeneration选项'中间的''先进的'。这可以加快解决方案,但可以使用更多的内存,并可以慢速度。

  3. 为了更快更准确的解决方案,改变integerpreprocess.选项'先进的'。这可能对解决方案过程具有很大的影响,无论是有益的还是没有。

  4. 为了更快更准确的解决方案,改变根本血管算法选项'primal-simplex'。通常这种变化不是有益的,但偶尔可以。

  5. 试图找到更多或更好的可行点,增加heuristicsmaxnodes.选项从其默认值50.到较高的数字,如One hundred.

  6. 要努力找到更多更好的可行点,改变现状启发式选项任职'中间的''先进的'

  7. 要努力找到更多更好的可行点,改变现状Branchrule选项“strongpscost”或者,如果该选择无法改善解决方案,'maxpscost'

  8. 为了更快的解决方案,增加客导性管理资源管理技术选项从其默认值为零到正值,例如1E-4。但是,这种变化会导致intlinprog.找到更少的整数可行点或更准确的解决方案。

  9. 要尝试更快地阻止求解器,改变RelativeGapTolerance选项比默认值更高的值1E-4。同样,要尝试获得更准确的答案,请改变RelativeGapTolerance值较低的值。这些变化并不总是改善结果。

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

通常,解决方案的一些据说整数值x(intcon)不是整数。intlinprog.认为整数内部的全部解决方案值IntegerTolerance整数。

要舍入所有保护的整数,恰好整数,使用功能。

x(intcon)= round(x(intcon));

警告

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

最大(a * x  -  b)%看,如果参赛作品不是太阳,所以有很小的不可行性max(abs(aeq * x  -  beq))%看条目是否足够零max(x  -  ub)%阳性条目是违规的max(lb  -  x)%阳性条目是违规的

大型组件不是重量的整数

intlinprog.不强制解决方案组件是整数值时,他们的绝对值超过2.1E9。当您的解决方案有这样的组件时,intlinprog.警告你。如果收到此警告,请检查解决方案以查看解决方案的备注整数值是否接近整数。

禁止大系数

intlinprog.不允许问题的组件,例如系数F一种, 或者UB., 超过1E15绝对值。如果你试着运行intlinprog.有这样的问题,intlinprog.发出错误。

如果您收到此错误,有时您可以扩展问题以具有较小的系数:

  • 对于系数F这太大了,尝试乘法F通过一个小的正比例因子。

  • 对于太大的约束系数,尝试将所有的边界和约束矩阵乘以相同的小的正比例因子。

参考文献

[1]威廉姆斯,H.保罗。数学规划中的模型构建。Wiley,2013年。