Gurobi: best bound 0.0e+00, gap 100.0000%

Hi, I am currently working on a cost minimization model. However, I have the problem when solving with Gurobi (v10) that my best bounds is stuck at 0.0 all the time. As a result, my gap remains constant at 100%. Additionally, due to my constraints, 0.0 is not even a possible solution value at all. Do you have any ideas what I could adjust e.g. in the Gurobi settings?

Can you post the full log file, and a reproducible example if possible?

I increased th solving time and the best bound increased. But it still takes very long to find a low gap:

Model has 61560 quadratic constraints
Variable types: 30780 continuous, 31366 integer (30888 binary)
Coefficient statistics:
  Matrix range     [4e-02, 2e+03]
  QMatrix range    [1e+00, 2e+02]
  QLMatrix range   [1e+00, 2e+00]
  Objective range  [2e-01, 6e-01]
  Bounds range     [2e+01, 8e+02]
  RHS range        [1e+00, 1e+04]
Presolve removed 23198 rows and 45600 columns
Presolve time: 0.18s
Presolved: 61838 rows, 31662 columns, 275538 nonzeros
Variable types: 0 continuous, 31662 integer (8290 binary)
Root relaxation presolve removed 72 rows and 54 columns
Root relaxation presolved: 15363 rows, 8088 columns, 109806 nonzeros

Root simplex log...

Iteration    Objective       Primal Inf.    Dual Inf.      Time
       0    0.0000000e+00   2.579441e+04   0.000000e+00     17s
     234    0.0000000e+00   0.000000e+00   0.000000e+00     17s
     234    0.0000000e+00   0.000000e+00   0.000000e+00     17s

Use crossover to convert LP symmetric solution to basic solution...

Root crossover log...

     122 PPushes remaining with PInf 0.0000000e+00                17s
       0 PPushes remaining with PInf 0.0000000e+00                17s

  Push phase complete: Pinf 0.0000000e+00, Dinf 0.0000000e+00     17s


Root simplex log...

Iteration    Objective       Primal Inf.    Dual Inf.      Time
     359    0.0000000e+00   0.000000e+00   0.000000e+00     17s
     359    0.0000000e+00   0.000000e+00   0.000000e+00     17s

Root relaxation: objective 0.000000e+00, 359 iterations, 0.23 seconds (0.26 work units)
Total elapsed time = 17.03s (DegenMoves)

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

     0     0    0.00000    0   80          -    0.00000      -     -   17s
H    0     0                    2282.2641111    0.00000   100%     -   18s
H    0     0                    1807.8457222    0.00000   100%     -   18s
H    0     0                     937.5238889    0.00000   100%     -   18s
H    0     0                     667.1665000    0.00000   100%     -   18s
     0     0    0.00000    0  320  667.16650    0.00000   100%     -   19s
     0     0    0.00000    0  225  667.16650    0.00000   100%     -   19s
H    0     0                     623.3211111    0.00000   100%     -   20s
H    0     0                     622.2406667    0.00000   100%     -   21s
H    0     0                     578.5859444    0.00000   100%     -   21s
     0     0    0.00000    0   95  578.58594    0.00000   100%     -   21s
     0     0    0.00000    0  294  578.58594    0.00000   100%     -   22s
     0     0    0.00000    0   95  578.58594    0.00000   100%     -   25s
H    0     0                     550.4546667    0.00000   100%     -   25s
     0     0    0.00000    0  298  550.45467    0.00000   100%     -   25s
     0     0    0.00000    0   93  550.45467    0.00000   100%     -   28s
     0     0    0.00000    0   93  550.45467    0.00000   100%     -   28s
     0     2    0.00000    0   93  550.45467    0.00000   100%     -   30s
    80    86    0.00000   19  259  550.45467    0.00000   100%   144   35s
   177   205    0.00000   38  176  550.45467    0.00000   100%   115   40s
   390   471    0.00000   76  165  550.45467    0.00000   100%  73.9   45s
H  584   664                     512.0512222    0.00000   100%  60.1   49s
   663   957    0.00000  122  162  512.05122    0.00000   100%  56.5   52s
   972   975    0.00000  123  162  512.05122    0.00000   100%  45.8   57s
  1388  1612    0.00000  195  155  512.05122    0.00000   100%  37.8   61s
  1740  1616  307.26728  267  167  512.05122    0.00000   100%  35.6   68s
H 1743  1614                     508.5397778    0.00000   100%  35.6   69s
  1744  1959  309.77296  268  154  508.53978    0.00000   100%  35.6   71s
  2620  2356    0.00000  172 4071  508.53978    0.00000   100%  31.2   76s
H 2621  2239                     508.3014444    0.00000   100%  31.1   77s
  2622  2239   13.38639  208   79  508.30144    0.00000   100%  31.1   81s
  2625  2241   86.78511    3   87  508.30144    0.00000   100%  31.1   91s
  2626  2242  360.87639  291  144  508.30144    0.00000   100%  31.1   96s
  2627  2243  293.68228  268  102  508.30144    0.00000   100%  31.1  102s
  2628  2243  359.94689  229  154  508.30144    0.00000   100%  31.1  106s
  2629  2244   64.63600  183   93  508.30144    0.00000   100%  31.1  112s
H 2629  2131                     507.6976667    0.00000   100%  31.1  116s
  2631  2132  322.49678  245  130  507.69767    0.00000   100%  31.0  121s
  2632  2133  161.39933   82  204  507.69767    0.00000   100%  31.0  126s
  2633  2134  365.38883  276  118  507.69767    0.00000   100%  31.0  130s
  2634  2134  161.39933  144  232  507.69767    0.00000   100%  31.0  135s
  2635  2135  150.34067   58   98  507.69767    0.00000   100%  31.0  140s
  2637  2136  230.42067    4  114  507.69767    0.00000   100%  31.0  150s
  2640  2141    0.00000   10  131  507.69767    0.00000   100%  39.8  155s
  2702  2179  175.23697   18  130  507.69767   31.48383  93.8%  44.2  160s
  2813  2226  304.80450   31  121  507.69767   31.48383  93.8%  47.4  165s
  2975  2294  294.22250   50  153  507.69767   31.48383  93.8%  49.0  170s
  3153  2370  143.40517   74  143  507.69767   31.48383  93.8%  50.8  175s
  3340  2485  275.01283   94  115  507.69767   31.48383  93.8%  52.7  180s
  3568  2616  143.40517  119  159  507.69767   31.48383  93.8%  54.5  185s
  3715  2705  204.41850  137  159  507.69767   31.48383  93.8%  56.5  190s
  3928  2851  143.40517  160  159  507.69767   31.48383  93.8%  58.5  197s
  4033  2947  143.40517  169  168  507.69767   31.48383  93.8%  58.9  200s
  4291  3128  237.10989  196  119  507.69767   31.48383  93.8%  59.0  206s
  4452  3230  143.40517  215  144  507.69767   31.48383  93.8%  59.0  210s
  4848  3572  159.43882  251  126  507.69767   31.48383  93.8%  57.9  219s
  5126  3811  269.52410  289   99  507.69767   31.48383  93.8%  58.3  222s
  5517  3869  375.38294  333   68  507.69767   31.48383  93.8%  56.6  225s
  5969  3954     cutoff   42       507.69767   31.48383  93.8%  57.5  230s
  6381  4082     cutoff   82       507.69767   37.21337  92.7%  56.9  235s
  6603  4179  143.40517   39  168  507.69767   54.62600  89.2%  57.0  240s
  6820  4600  143.40517   91  109  507.69767   54.62600  89.2%  56.9  246s
  7594  5017  399.52346  307   61  507.69767   60.35553  88.1%  55.6  253s
  8089  4965  143.40517   20  172  507.69767   85.28361  83.2%  54.9  256s
  8286  5143  143.40517   60  145  507.69767   85.28361  83.2%  55.1  263s
  8505  5179  143.40517   91  145  507.69767   85.28361  83.2%  54.8  266s
  8744  5372  143.40517  146   97  507.69767   85.28361  83.2%  53.8  272s
  8887  5470  143.40517  179  172  507.69767   85.28361  83.2%  53.4  275s
  9208  5893  187.98144  230  126  507.69767   85.28361  83.2%  52.6  283s
  9622  7084  365.79400  263  114  507.69767   86.04586  83.1%  51.2  288s
 10915  7455 infeasible  231       507.69767  111.92133  78.0%  48.0  296s
 11403  7656  143.40517   59  175  507.69767  111.92133  78.0%  48.3  300s
 11847  8069  256.39106  130  151  507.69767  111.92133  78.0%  49.0  309s
 12152  8242  256.39106  179   90  507.69767  111.92133  78.0%  48.3  314s
 12343  8404  496.06223  213  113  507.69767  111.92133  78.0%  48.1  320s
 12560  8559  445.76278   20  147  507.69767  111.92133  78.0%  48.6  327s
 12797  8808  382.09600   38  148  507.69767  111.92133  78.0%  49.0  334s
 13077 10640  143.40517   49  173  507.69767  111.92133  78.0%  48.8  344s
 15088 11257  143.40517   81  210  507.69767  111.92133  78.0%  45.6  348s
 15772 11286  197.24467   23  216  507.69767  142.57894  71.9%  45.3  352s
 15801 11920  197.24467   31  169  507.69767  142.57894  71.9%  45.3  356s
 16544 12102  294.58794   25  173  507.69767  143.40517  71.8%  44.5  361s
 16730 12295  320.21170   79  153  507.69767  143.40517  71.8%  44.4  366s
 16950 12451  361.24978  134  143  507.69767  143.40517  71.8%  44.3  371s
 17171 12551  143.40517   26  216  507.69767  143.40517  71.8%  44.6  376s
 17334 12697  406.12000   40   90  507.69767  143.40517  71.8%  45.4  381s
 17546 12925  283.44983   94  114  507.69767  143.40517  71.8%  45.4  386s
 17817 13074  471.11668  151  119  507.69767  143.40517  71.8%  45.3  392s
 18004 13303  344.78094  121  135  507.69767  143.40517  71.8%  45.5  398s
 18289 13561  304.80450   97   98  507.69767  143.40517  71.8%  45.4  404s
 18606 13794  503.44474  187   65  507.69767  143.40517  71.8%  45.2  412s
 18930 14028  315.14022  130  104  507.69767  143.40517  71.8%  45.3  418s
 19265 14216  237.24494  129   90  507.69767  143.40517  71.8%  45.4  424s
 19531 14455  272.67717   63  112  507.69767  143.40517  71.8%  45.5  431s
 19820 15709  339.75663  110  152  507.69767  143.40517  71.8%  45.4  440s
 21403 16173  413.76256   98  133  507.69767  143.40517  71.8%  45.1  451s
 22124 16581  464.06678  100  114  507.69767  143.40517  71.8%  45.8  458s
 22627 17019 infeasible   69       507.69767  143.40517  71.8%  45.8  466s
 23139 17377  436.41217   45  144  507.69767  143.40517  71.8%  45.6  474s
 23564 17666  170.78172   40  148  507.69767  143.40517  71.8%  45.7  483s
 23938 18953  240.24689  118  165  507.69767  143.40517  71.8%  46.1  495s
 25595 19623  387.02950  123  164  507.69767  143.40517  71.8%  46.4  503s
 26444 20099  327.20783   41  180  507.69767  143.40517  71.8%  46.9  510s
 27048 20405  303.47140   51  173  507.69767  143.40517  71.8%  47.2  516s
 27397 20834  296.04972   72  149  507.69767  143.40517  71.8%  47.7  523s
 27971 21133  448.62570   68  138  507.69767  143.40517  71.8%  48.2  530s
 28424 21801  421.22239   51  172  507.69767  143.40517  71.8%  48.9  538s
 29230 22269  304.80450   76  197  507.69767  143.40517  71.8%  49.1  546s
 29878 22537  490.81043   62  180  507.69767  143.40517  71.8%  49.9  553s
 30270 22765  337.54356  112  122  507.69767  143.40517  71.8%  50.6  559s
 30533 23077  309.47266   65  243  507.69767  143.40517  71.8%  50.7  566s
 30934 23461  444.90478  104   99  507.69767  143.40517  71.8%  51.0  574s
 31443 23921  295.50950   60  233  507.69767  143.40517  71.8%  51.6  581s
 32000 24593  412.22928   36  209  507.69767  143.40517  71.8%  51.9  593s
 32805 25071  256.10815   99  109  507.69767  143.40517  71.8%  52.4  600s

Cutting planes:
  Learned: 161
  Gomory: 193
  Lift-and-project: 7
  Cover: 2152
  Implied bound: 1251
  Projected implied bound: 31
  Clique: 319
  MIR: 1037
  Mixing: 2
  StrongCG: 565
  Flow cover: 1534
  GUB cover: 79
  Inf proof: 381
  Zero half: 98
  RLT: 104
  Relax-and-lift: 20
  BQP: 231
  PSD: 10

Explored 33373 nodes (1775253 simplex iterations) in 600.18 seconds (574.98 work units)
Thread count was 4 (of 4 available processors)

Solution count 10: 507.698 508.301 508.54 ... 937.524

Time limit reached
Best objective 5.076976666667e+02, best bound 1.434051666667e+02, gap 71.7538%

User-callback calls 188905, time in user-callback 0.30 sec

And here´s the part of the code, which increases the running time extremely:

@variable(model, start[1:n] >= 0, Int);
@variable(model, end[1:l] >= 0, Int);
@variable(model, a[1:I,1:L,1:W,1:M,1:N], Bin);
@variable(model, max >= y[i in 1:I, l in 1:L, w in 1:W, m in 1:M, n in 1:N] >= 0)

for i in 1:I, l in 1:L, w in 1:W, m in 1:M, n in 1:N
    @constraint(model, y[i, l, w, m, n] == a[i, l, w, m, n] * (T - ((100 * w - 250) * ((start[n] - end[l])) + T)))
end

@expression(model, cost,
    sum(g[i] * c * y[i, l, w, m, n] / b * p
        for i in 1:I, l in 1:L, w in 1:W, m in 1:M, n in 1:N));

@objective(model, Min, cost_total = cost);

@odow
Additional question: is it possible to add to the code that z must always be a maximum of 800 without affecting other variables in their value range? The problem is that the min function is not applicable here:

for i in 1:I, l in 1:L, w in 1:W, m in 1:M, n in 1:N
    @constraint(model, y[i, l, w, m, n] == min,(800, a[i, l, w, m, n] * (T - ((100 * w - 250) * ((start[n] - end[l])) + T))))
end

Constraints of type MathOptInterface.ScalarNonlinearFunction-in-MathOptInterface.EqualTo{Float64} are not supported by the solver.

Can you provide a fully reproducible example that I can copy-paste? I don’t know what all the problem data are.

One thing to try is:

@variable(model, 0 <= y_tmp[i in 1:I, l in 1:L, w in 1:W, m in 1:M, n in 1:N] <= max)
for i in 1:I, l in 1:L, w in 1:W, m in 1:M, n in 1:N
    @constraints(model, begin
        y_tmp[i, l, w, m, n] == T - ((100 * w - 250) * ((start[n] - end[l])) + T)
        y[i, l, w, m, n] == a[i, l, w, m, n] * y_tmp[i, l, w, m, n]
    end)
end

or perhaps

for i in 1:I, l in 1:L, w in 1:W, m in 1:M, n in 1:N
    # @constraint(
    #     model,
    #     y[i, l, w, m, n] == a[i, l, w, m, n] * (T - ((100 * w - 250) * ((start[n] - end[l])) + T))
    # )
    # a == 1 => y == (100 * w - 250) * (start[n] - end[l])
    # a == 0 => y == 0
    @constraint(model, y[i, l, w, m, n] <= a[i, l, w, m, n] * max)
    @constraint(model, a[i, l, w, m, n] --> {y[i, l, w, m, n] == (100 * w - 250) * (start[n] - end[l])})
end

If they don’t help, it might just be a hard problem. But it’s hard to offer concrete advice without a fully reproducible example. You might want to consider alternate formulations.

For the min, you’ll need to introduce additional binary variables. This link will help, if you swap max for min:

Alternatively, if you always want to maximize y, then you can use:

@odow
Thanks for the response. Here´s an example. there are, of course, even more conditions, but I think that should be enough:

I = 30
L = 12
N = 6
W = 2
M = 2

@variable(model, 72 >= start[1:n] >= 0, Int);
@variable(model, end[1:l] >= 0, Int);
@variable(model, a[1:I,1:L,1:W,1:M,1:N], Bin);
@variable(model, max >= y[i in 1:I, l in 1:L, w in 1:W, m in 1:M, n in 1:N] >= 0)

@constraint(model, [i in 1:I, l in 1:L, w in 1:W, m in 1:M, n in 1:N], a[i, l, w, m, n] * (start[n] - end[l]) >= 0);

for i in 1:I, l in 1:L, w in 1:W, m in 1:M, n in 1:N
    @constraint(model, y[i, l, w, m, n] == a[i, l, w, m, n] * (T - ((100 * w - 250) * ((start[n] - end[l])) + T)))
end

b = 3600
p = 80
c = 0.6

g = Array{Float64}(undef, i)

min = 10 
max = 40

for i in 1:I
    g[I] = round(rand() * (max- min)+ min, digits =2)
end

@expression(model, cost,
    sum(g[i] * c * y[i, l, w, m, n] / b * p
        for i in 1:I, l in 1:L, w in 1:W, m in 1:M, n in 1:N));

@objective(model, Min, cost_total = cost);

In this case, it really depends what the other conditions are.

I had to make a few changes to get your code to run:

using JuMP, Gurobi
I = 30
L = 12
N = 6
W = 2
M = 2
T = 72  # ???
b = 3600
p = 80
c = 0.6
y_min = 10 
y_max = 40
g = round.(rand(I) .* (y_max - y_min) .+ y_min; digits = 2)
model = Model(Gurobi.Optimizer)
@variables(model, begin
    0 <= x_start[1:N] <= 72, Int
    x_end[1:L] >= 0, Int
    a[1:I, 1:L, 1:W, 1:M, 1:N], Bin
    0 <= y[1:I, 1:L, 1:W, 1:M, 1:N] <= y_max
end)
@constraints(model, begin
    [i in 1:I, l in 1:L, w in 1:W, m in 1:M, n in 1:N],
        a[i, l, w, m, n] * (x_start[n] - x_end[l]) >= 0
    [i in 1:I, l in 1:L, w in 1:W, m in 1:M, n in 1:N],
        y[i, l, w, m, n] == a[i, l, w, m, n] * -(100 * w - 250) * (x_start[n] - x_end[l])
end)
@expression(model, cost,
    c  / b * p * sum(g[i] * y[i, l, w, m, n] for i in 1:I, l in 1:L, w in 1:W, m in 1:M, n in 1:N),
)
@objective(model, Min, cost)
optimize!(model)

I think that, stepping back, you need to need to reconsider what your mathematical formulation (rather than JuMP or Julia code), but it’s hard to offer advice without the full model.