调优整数线性规划
改变改善解决方案的过程
请注意
通常,您可以更改配方的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年。