簡體   English   中英

在MIP求解器中保持切割而不分支(Gurobi)

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM