调优整数线性规划
改变改善解决方案的过程
请注意
通常,您可以更改配方的MILP使它更容易解决。建议如何改变你的配方,看到威廉姆斯[1]。
在你运行intlinprog
一次,你可能想要改变一些选项并重新运行它。你可能想要看到的改变包括:
较低的运行时
较低的最终目标函数值(一个更好的解决方案)
最后小缺口
不同的可行点
下面是一般建议选择变化最有可能帮助解决方案过程。试一试这个顺序的建议:
更快和更准确的解决方案,增加
CutMaxIterations
从其默认选项10
到一个更高的数量等25
。这可以加速解决方案,但也可以减缓它。更快和更准确的解决方案,改变
CutGeneration
选项“中间”
或“高级”
。这可以加速解决方案,但可以使用更多的内存,可以缓慢的解决方案。更快和更准确的解决方案,改变
IntegerPreprocess
选项“高级”
。这对解决方案过程有很大影响,有益的或不是。更快和更准确的解决方案,改变
RootLPAlgorithm
选项“primal-simplex”
。通常这种变化不是有益的,但是偶尔也可以。试图找到更多或更好的可行点,增加了
HeuristicsMaxNodes
从其默认选项50
到一个更高的数量等One hundred.
。试图找到更多或更好的可行点,改变
启发式
选择,要么“中间”
或“高级”
。试图找到更多或更好的可行点,改变
BranchRule
选项“strongpscost”
或者,如果选择未能改善解决方案,“maxpscost”
。更快的解决方案,增加了
ObjectiveImprovementThreshold
选择默认的零等积极的价值1的军医
。然而,这种变化可能会导致intlinprog
找到更少的整数可行点或不准确的解决方案。更快地试图阻止解算器,改变
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年。