[英]keep cutting without branching in MIP solver (Gurobi)
我有一个MIP,我几乎肯定知道解决方案。 我想用gurobi来证明真正的解决方案(即使它不是我提供的解决方案)也不应超过我给出的解决方案的0.5%。 我相信简单地保持切割而不分支可能会节省更多时间。 你知道一种方法,我可以简单地在没有分支的情况下进行切割吗? 这是代码性能:
将参数LogFile的值更改为Prev:gurobi.log默认值:参数MIPFocus的值更改为3上一个:0最小值:0最大值:3默认值:0参数切换值切换为3上一个:-1最小值:-1最大值:3默认值:-1优化具有1794行,673列和4180非零的模型找到启发式解决方案:objective -22.8549 Presolve删除了18行和17列预解决时间:0.01s预解决:1776行,656列,4464非零
加载的MIP以目标-342.641开始
变量类型:592连续,64整数(64二进制)预先求解:1776行,656列,4464非零
根松弛:目标-6.775689e + 02,682次迭代,0.02秒
Nodes | Current Node | Objective Bounds | Work
Expl Unexpl | Obj Depth IntInf | Incumbent BestBd Gap | It/Node Time
0 0 -677.56892 0 64 -342.64109 -677.56892 97.7% - 0s
0 0 -666.45290 0 72 -342.64109 -666.45290 94.5% - 0s
0 0 -658.68050 0 72 -342.64109 -658.68050 92.2% - 1s
0 0 -540.92023 0 72 -342.64109 -540.92023 57.9% - 3s
0 0 -503.36031 0 72 -342.64109 -503.36031 46.9% - 4s
0 0 -485.13025 0 72 -342.64109 -485.13025 41.6% - 6s
0 0 -472.73790 0 72 -342.64109 -472.73790 38.0% - 8s
0 0 -461.23185 0 72 -342.64109 -461.23185 34.6% - 9s
0 0 -453.99476 0 72 -342.64109 -453.99476 32.5% - 10s
0 0 -452.23014 0 72 -342.64109 -452.23014 32.0% - 10s
0 3 -452.23014 0 72 -342.64109 -452.23014 32.0% - 11s
642 586 -397.07656 12 54 -342.64109 -429.76289 25.4% 120 15s
1425 1290 -397.34606 11 60 -342.64109 -422.53417 23.3% 114 20s
1716 1553 -382.83438 18 72 -342.64109 -420.42709 22.7% 111 25s
1727 1560 -376.17473 16 72 -342.64109 -420.42709 22.7% 110 30s
1733 1564 -410.28764 10 72 -342.64109 -420.42709 22.7% 110 35s
1744 1571 -382.83438 18 72 -342.64109 -420.42709 22.7% 109 40s
1750 1577 -412.59771 12 69 -342.64109 -416.84728 21.7% 113 45s
1817 1602 -380.32997 19 60 -342.64109 -404.73090 18.1% 120 50s
2618 2045 -375.99924 18 62 -342.64109 -391.32863 14.2% 126 55s
3159 2315 -369.40052 22 59 -342.64109 -386.33088 12.8% 127 60s
3808 2595 -362.27693 20 60 -342.64109 -382.29310 11.6% 127 65s
4503 2903 -350.90325 24 54 -342.64109 -379.52932 10.8% 126 71s
4895 3078 -349.90847 23 55 -342.64109 -378.33598 10.4% 126 78s
5339 3242 -363.26836 21 59 -342.64109 -376.77299 10.0% 126 80s
....
要避免在Gurobi(Cplex)中进行分支,可以将参数NodeLimit(Cplex中的NodLim)设置为1.要执行您最终需要的操作,只需验证解决方案是否在0.5%或最佳范围内,您可以将已知解决方案加载为incument(mip start,正如你已经做的那样)将MIPFocus参数设置为3(移动限制)并将MIPGap参数设置为0.005,这将使Gurobi(cplex)在找到所需条件时停止。
如果您确信您的解决方案比解算器找到的任何解决方案更好,那么您也可以使用Heuristics参数关闭启发式算法。 Gurobi通常会花费大约5%的时间来寻找更好的解决方案,除非找到的任何解决方案比您提供的现有解决方案更好,否则这将无济于事。 在Cplex中,参数是HeurFreq ,您将其设置为-1以关闭。
你也可能提出可以改善界限的预测,特别是在根部。 尝试将Presolve调到2,将PreDual调到2.还有一个Symmetry参数,可以在根处进行额外的减少。 通常默认设置是最好的,但在您的情况下,它们可能至少值得尝试。
仅对于CPLEX,有一个Probing参数,您可以将其设置为3.这将平均缩短解决方案时间,但也可能会提高您在根处的界限。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.