笔记
通常,您可以改变MILP的公式,使其更容易求解。关于如何改变你的提法的建议,请参阅Williams[1]。
你跑后intlinprog.
一旦,您可能希望更改一些选项并重新运行它。您可能想要查看的更改包括:
较低的运行时间
较低的最终目标函数值(更好的解决方案)
较小的最终差距
更多或不同的可行点
以下是最有可能帮助解决方案过程的选项变更的一般性建议。按此顺序尝试建议:
为了更快,更准确的解决方案,增加削减
选项从其默认值10.
到较高的数字,如25.
。这可以加快解决方案,但也可以慢速速度。
为了更快更准确的解决方案,改变CutGeneration
选项'中间的'
或'先进的'
。这可以加快解决方案,但可以使用更多的内存,并可以慢速度。
为了更快更准确的解决方案,改变integerpreprocess.
选项'先进的'
。这可能对解决方案过程具有很大的影响,无论是有益的还是没有。
为了更快更准确的解决方案,改变根本血管算法
选项'primal-simplex'
。通常这种变化不是有益的,但偶尔可以。
试图找到更多或更好的可行点,增加heuristicsmaxnodes.
选项从其默认值50.
到较高的数字,如One hundred.
。
要努力找到更多更好的可行点,改变现状启发式
选项任职'中间的'
或'先进的'
。
要努力找到更多更好的可行点,改变现状Branchrule
选项“strongpscost”
或者,如果该选择无法改善解决方案,'maxpscost'
。
为了更快的解决方案,增加客导性管理资源管理技术
选项从其默认值为零到正值,例如1E-4
。但是,这种变化会导致intlinprog.
找到更少的整数可行点或更准确的解决方案。
要尝试更快地阻止求解器,改变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年。