Gurobi example¶

[1]:
from optiwindnet.importer import load_repository
from optiwindnet.svg import svgplot
from optiwindnet.mesh import make_planar_embedding
from optiwindnet.interarraylib import G_from_S
from optiwindnet.heuristics import EW_presolver
from optiwindnet.MILP import solver_factory, ModelOptions

Initialize Gwynt y Mor¶

[2]:
locations = load_repository()
[3]:
L = locations.gwynt
capacity = 6
[4]:
svgplot(L)
[4]:
../_images/notebooks_22-MILP_gurobi_example_5_0.svg

Optimize Gwynt y Mor¶

[5]:
P, A = make_planar_embedding(L)

Initial heuristic solution to warm-start the solver:

[6]:
Sʹ = EW_presolver(A, capacity=capacity)
Gʹ = G_from_S(Sʹ, A)
svgplot(Gʹ)
[6]:
../_images/notebooks_22-MILP_gurobi_example_9_0.svg
[7]:
solver = solver_factory('gurobi')
[8]:
solver.set_problem(
    P, A,
    capacity=Sʹ.graph['capacity'],
    model_options=ModelOptions(
        topology="branched",
        feeder_route="segmented",
        feeder_limit="unlimited",
    ),
    warmstart=Sʹ,
)
[9]:
solver.solve(
    mip_gap=0.005,
    time_limit=90,
    verbose=True,
)
Set parameter OutputFlag to value 1
Gurobi Optimizer version 12.0.2 build v12.0.2rc0 (win64 - Windows 11.0 (26100.2))

CPU model: 11th Gen Intel(R) Core(TM) i7-11850H @ 2.50GHz, instruction set [SSE2|AVX|AVX2|AVX512]
Thread count: 8 physical cores, 16 logical processors, using up to 16 threads

Non-default parameters:
TimeLimit  90
MIPGap  0.005
MIPFocus  1

Academic license 937681 - for non-commercial use only - registered to ma___@dtu.dk
Optimize a model with 5938 rows, 3976 columns and 22544 nonzeros
Model fingerprint: 0x53addd12
Variable types: 0 continuous, 3976 integer (1988 binary)
Coefficient statistics:
  Matrix range     [1e+00, 6e+00]
  Objective range  [4e+02, 1e+04]
  Bounds range     [1e+00, 6e+00]
  RHS range        [1e+00, 2e+02]

Loaded user MIP start with objective 138349

Presolve removed 757 rows and 0 columns
Presolve time: 0.03s
Presolved: 5181 rows, 3976 columns, 19044 nonzeros
Variable types: 0 continuous, 3976 integer (1988 binary)

Root relaxation: objective 1.252287e+05, 4568 iterations, 0.08 seconds (0.10 work units)

    Nodes    |    Current Node    |     Objective Bounds      |     Work
 Expl Unexpl |  Obj  Depth IntInf | Incumbent    BestBd   Gap | It/Node Time

     0     0 125228.749    0  310 138349.264 125228.749  9.48%     -    0s
H    0     0                    138342.10021 125228.749  9.48%     -    0s
H    0     0                    138330.82125 125228.749  9.47%     -    0s
H    0     0                    138327.82020 125228.749  9.47%     -    0s
H    0     0                    136182.69132 125228.749  8.04%     -    0s
H    0     0                    136181.59500 125228.749  8.04%     -    0s
H    0     0                    136181.41684 125228.749  8.04%     -    0s
H    0     0                    136179.51101 125228.749  8.04%     -    0s
H    0     0                    136178.70664 125228.749  8.04%     -    0s
H    0     0                    136178.41578 125228.749  8.04%     -    0s
H    0     0                    135970.93850 125228.749  7.90%     -    0s
H    0     0                    135958.34540 125228.749  7.89%     -    0s
H    0     0                    135110.24716 125228.749  7.31%     -    0s
H    0     0                    135109.44597 125228.749  7.31%     -    0s
H    0     0                    135108.83583 125653.007  7.00%     -    0s
     0     0 125653.007    0  472 135108.836 125653.007  7.00%     -    0s
H    0     0                    135108.27410 125653.007  7.00%     -    0s
H    0     0                    134876.80981 125653.007  6.84%     -    0s
H    0     0                    134863.96445 125653.007  6.83%     -    0s
H    0     0                    134340.42058 125653.007  6.47%     -    0s
H    0     0                    134339.61798 125653.007  6.47%     -    0s
H    0     0                    134339.59465 125653.007  6.47%     -    0s
H    0     0                    134339.46458 125653.007  6.47%     -    0s
H    0     0                    134339.33059 125653.007  6.47%     -    0s
     0     0 125717.537    0  505 134339.331 125717.537  6.42%     -    0s
     0     0 125720.502    0  519 134339.331 125720.502  6.42%     -    0s
     0     0 125720.732    0  514 134339.331 125720.732  6.42%     -    0s
     0     0 125720.733    0  514 134339.331 125720.733  6.42%     -    0s
     0     0 126097.783    0  537 134339.331 126097.783  6.13%     -    1s
     0     0 126110.609    0  571 134339.331 126110.609  6.13%     -    1s
     0     0 126117.238    0  543 134339.331 126117.238  6.12%     -    1s
H    0     0                    134165.85548 126118.406  6.00%     -    1s
H    0     0                    134165.36007 126118.406  6.00%     -    1s
H    0     0                    134165.07878 126118.406  6.00%     -    1s
H    0     0                    134164.27580 126118.406  6.00%     -    1s
     0     0 126118.406    0  563 134164.276 126118.406  6.00%     -    1s
     0     0 126118.609    0  575 134164.276 126118.609  6.00%     -    1s
     0     0 126118.657    0  589 134164.276 126118.657  6.00%     -    1s
H    0     0                    134164.25391 126118.657  6.00%     -    1s
H    0     0                    134163.68288 126118.657  6.00%     -    1s
     0     0 126205.700    0  575 134163.683 126205.700  5.93%     -    1s
H    0     0                    134163.12114 126205.700  5.93%     -    1s
H    0     0                    134148.29846 126205.700  5.92%     -    1s
     0     0 126248.160    0  508 134148.298 126248.160  5.89%     -    1s
     0     0 126261.133    0  557 134148.298 126261.133  5.88%     -    1s
H    0     0                    133589.97784 126271.379  5.48%     -    2s
     0     0 126271.379    0  564 133589.978 126271.379  5.48%     -    2s
H    0     0                    133233.28481 126272.166  5.22%     -    2s
H    0     0                    133233.27026 126272.166  5.22%     -    2s
     0     0 126272.166    0  581 133233.270 126272.166  5.22%     -    2s
     0     0 126273.676    0  578 133233.270 126273.676  5.22%     -    2s
     0     0 126273.697    0  589 133233.270 126273.697  5.22%     -    2s
H    0     0                    133233.20449 126273.697  5.22%     -    2s
H    0     0                    133152.11368 126273.697  5.17%     -    2s
H    0     0                    132980.56962 126273.697  5.04%     -    2s
H    0     0                    132979.76664 126273.697  5.04%     -    2s
H    0     0                    132978.53079 126313.751  5.01%     -    2s
H    0     0                    132978.30401 126313.751  5.01%     -    2s
     0     0 126313.751    0  625 132978.304 126313.751  5.01%     -    2s
     0     0 126338.310    0  614 132978.304 126338.310  4.99%     -    3s
     0     0 126342.390    0  591 132978.304 126342.390  4.99%     -    3s
     0     0 126344.028    0  620 132978.304 126344.028  4.99%     -    3s
     0     0 126344.711    0  631 132978.304 126344.711  4.99%     -    3s
     0     0 126344.726    0  632 132978.304 126344.726  4.99%     -    3s
     0     0 126369.503    0  587 132978.304 126369.503  4.97%     -    3s
H    0     0                    132977.65628 126369.503  4.97%     -    3s
H    0     0                    132977.11832 126369.503  4.97%     -    3s
H    0     0                    132967.88839 126369.516  4.96%     -    4s
H    0     0                    132965.49301 126369.516  4.96%     -    4s
H    0     0                    132623.38745 126369.516  4.72%     -    4s
H    0     0                    132479.10566 126369.516  4.61%     -    5s
H    0     0                    132297.13443 126369.516  4.48%     -    5s
H    0     2                    131714.07279 126369.516  4.06%     -    8s
     0     2 126369.516    0  587 131714.073 126369.516  4.06%     -    8s
H    6     8                    131482.60974 126373.933  3.89%   247    8s
H   15    24                    131278.73387 126408.816  3.71%   452    9s
H   39    48                    131276.18669 126418.723  3.70%   409    9s
H   44    48                    131234.07918 126418.723  3.67%   425    9s
    47    64 126456.910    8  591 131234.079 126418.723  3.67%   425   10s
H   73    83                    131233.00075 126418.723  3.67%   412   10s
H  128   139                    131232.65678 126418.723  3.67%   369   11s
H  159   176                    131038.66079 126418.723  3.53%   354   11s
H  170   176                    130995.66800 126418.723  3.49%   347   11s
H  173   176                    130993.85253 126418.723  3.49%   346   11s
H  246   251                    130993.78530 126418.723  3.49%   319   12s
H  293   302                    130964.60045 126418.723  3.47%   303   13s
H  301   340                    130964.55511 126418.723  3.47%   303   13s
H  344   348                    130963.14084 126418.723  3.47%   291   13s
H  409   415                    130732.39791 126418.723  3.30%   275   13s
   636   654 129251.361   52  362 130732.398 126418.723  3.30%   240   15s
H 1160  1106                    130731.76770 126422.283  3.30%   218   17s
H 1462  1283                    130144.39448 126422.283  2.86%   211   18s
H 1544  1364                    130144.09499 126422.283  2.86%   208   19s
H 1544  1364                    130143.90418 126422.283  2.86%   208   19s
  1608  1365 129454.379   56  587 130143.904 126430.386  2.85%   205   20s
  1635  1383 127372.764   18  666 130143.904 126515.770  2.79%   201   25s
  1636  1384 127954.986   32  666 130143.904 126515.772  2.79%   201   31s
  1790  1519 126868.993   19  680 130143.904 126555.396  2.76%   233   35s
  2258  1815 127063.656   31  568 130143.904 126555.396  2.76%   249   40s
  2783  2142 128768.796   51  432 130143.904 126563.163  2.75%   241   45s
  3478  2541 127594.686   54  515 130143.904 126566.262  2.75%   236   50s
  4531  2924 126789.247   27  606 130143.904 126580.201  2.74%   222   55s
H 4612  2847                    130059.15017 126583.968  2.67%   222   57s
  5213  3287 128033.830   64  504 130059.150 126591.332  2.67%   217   60s
H 5722  3132                    129520.77078 126592.088  2.26%   209   62s
  6355  3897 128881.490   76  462 129520.771 126592.088  2.26%   204   65s
  7642  4815 128553.046   48  439 129520.771 126592.088  2.26%   200   70s
  8314  5267 127150.667   27  479 129520.771 126592.323  2.26%   197   76s
H 8325  4957                    129226.51179 126592.323  2.04%   197   76s
H 8339  4932                    129200.19218 126592.323  2.02%   197   77s
  8374  4961 127312.408   33  427 129200.192 126592.323  2.02%   197   80s
H 8457  4623                    128899.33531 126592.323  1.79%   196   84s
  8458  5001 127341.027   35  434 128899.335 126592.323  1.79%   196   86s
H 8556  4869                    128807.18580 126592.323  1.72%   195   86s
H 8982  5087                    128806.91198 126599.119  1.71%   194   90s

Cutting planes:
  Gomory: 45
  Lift-and-project: 3
  Cover: 3
  MIR: 451
  StrongCG: 17
  Flow cover: 354
  Flow path: 11
  GUB cover: 2
  Mod-K: 3
  Network: 32
  Relax-and-lift: 11

Explored 9242 nodes (1807072 simplex iterations) in 90.14 seconds (88.39 work units)
Thread count was 16 (of 16 available processors)

Solution count 10: 128807 128807 128899 ... 130144

Time limit reached
Best objective 1.288069119839e+05, best bound 1.265991192522e+05, gap 1.7140%
WARNING: Loading a SolverResults object with an 'aborted' status, but
containing a solution
[9]:
SolutionInfo(runtime=90.14299988746643, bound=126599.11925224712, objective=128806.91198386771, relgap=0.01714032808966881, termination='maxTimeLimit')

The pyomo GurobiDirect class can work as context manager by passing the manage_env=True parameter to SolverFactory. Advantages of operating this way:

  • the Gurobi license is released after the context’s scope ends

  • one can pass options that can only be set at the Gurobi environment creation (such as threadlimit)

[10]:
S, G = solver.get_solution()
[11]:
svgplot(G)
[11]:
../_images/notebooks_22-MILP_gurobi_example_15_0.svg