[英]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.