Gurobi 12 incorrectly reporting QCQP as unbounded
OngoingHello,
I'm writing an algorithm that solves many optimization problems at various stages of the process. In testing, I've come across an instance that is giving me unexpected results. Specifically, when solving a particular QCQP, I receive the following output:
Gurobi Optimizer version 12.0.0 build v12.0.0rc1 (linux64 - "ubuntu-autoinstall-2024-09-05 (Cubic 2024-09-05 10:59)")
CPU model: AMD Ryzen 7 PRO 5850U with Radeon Graphics, instruction set [SSE2|AVX|AVX2]
Thread count: 8 physical cores, 16 logical processors, using up to 1 threads
Non-default parameters:
Threads 1
Optimize a model with 6 rows, 8 columns and 33 nonzeros
Model fingerprint: 0x829efda3
Model has 2 quadratic constraints
Variable types: 8 continuous, 0 integer (0 binary)
Coefficient statistics:
Matrix range [1e+00, 5e+00]
QMatrix range [1e+00, 1e+01]
QLMatrix range [1e+00, 4e+00]
Objective range [1e+00, 1e+00]
Bounds range [3e+00, 4e+01]
RHS range [2e+00, 4e+01]
Loaded MIP start from previous solve with objective 40.9938
Presolve removed 6 rows and 4 columns
Presolve time: 0.00s
Explored 0 nodes (0 simplex iterations) in 0.00 seconds (0.00 work units)
Thread count was 1 (of 16 available processors)
Solution count 1: 40.9938
Model is unbounded
Best objective 4.099382716049e+01, best bound -, gap -
However, I know based on my variable bounds that this problem cannot be unbounded. So, when I reach this point in the algorithm, I print the file to "Killer_prob.lp", which contains:
\ Model _copy
\ LP format - for model browsing. Use MPS format to capture full model detail.
\ Signature: 0x4f394ca8edf70690
Minimize
OBJ_VAR[1]
Subject To
c1: - 2 x1 + 5 x2 + x3 + x4 + 5 x5 + x6 <= 24
c2: - x1 - 4 x2 - 3 x3 + 4 x5 + 2 x6 <= -12
c3: x1 + x2 - x3 + x4 + x5 + 4 x6 <= 15
c4: 5 x1 + 3 x3 + 2 x4 + 2 x5 + 2 x6 <= 40
c5: - 3 x1 + 2 x2 + 3 x3 + 3 x4 + 2 x5 <= 16
c6: - 2 x1 - 5 x2 - 4 x3 + 4 x4 + 5 x5 + 3 x6 <= -2
obj1: - 4 x1 - x2 + 3 x3 - x4 - 2 x5 - 3 x6 - OBJ_VAR[0] + [ 5 x1 ^2
- 2 x1 * x2 + x1 * x5 - 4 x1 * x6 + 4.5 x2 ^2 + 4 x2 * x3 - 7 x2 * x4
+ 5 x3 ^2 + 3 x3 * x5 + 2 x3 * x6 + 4.5 x4 ^2 + 4 x4 * x5 - 4 x4 * x6
+ 7.5 x5 ^2 - 8 x5 * x6 + 10 x6 ^2 ] = 0
obj2: x1 - x2 - 2 x3 + 3 x4 - x5 + x6 - OBJ_VAR[1] + [ 3.5 x1 ^2 - x1 * x2
- x1 * x3 + 2 x1 * x4 + 5 x1 * x5 - x1 * x6 + 3.5 x2 ^2 - 10 x2 * x3
- 5 x2 * x4 + x2 * x5 - x2 * x6 + 9 x3 ^2 + 5 x3 * x4 - 4 x3 * x5
+ 3 x3 * x6 + 7 x4 ^2 + 6 x4 * x6 + 2.5 x5 ^2 - 2 x5 * x6 + 3 x6 ^2 ]
= 0
Bounds
x1 = 0
x2 = 3
x3 = 0
x4 <= 5
x5 <= 5
x6 <= 5
OBJ_VAR[0] >= 10.45882000149557
-infinity <= OBJ_VAR[1] <= 42.48294770797327
End
I then solve this problem alone and receive:
Set parameter Username
Set parameter LicenseID to value 2599230
Set parameter LogFile to value "gurobi.log"
Using license file /home/adelgren/gurobi_12_lic/gurobi.lic
Academic license - for non-commercial use only - expires 2025-12-13
Gurobi Optimizer version 12.0.0 build v12.0.0rc1 (linux64 - "ubuntu-autoinstall-2024-09-05 (Cubic 2024-09-05 10:59)")
Copyright (c) 2024, Gurobi Optimization, LLC
Read LP format model from file Killer_prob.lp
Reading time = 0.00 seconds
: 6 rows, 8 columns, 33 nonzeros
Using Gurobi shared library /home/adelgren/Downloads/gurobi1200/linux64/lib/libgurobi.so.12.0.0
CPU model: AMD Ryzen 7 PRO 5850U with Radeon Graphics, instruction set [SSE2|AVX|AVX2]
Thread count: 8 physical cores, 16 logical processors, using up to 16 threads
Optimize a model with 6 rows, 8 columns and 33 nonzeros
Model fingerprint: 0x071f2b92
Model has 2 quadratic constraints
Coefficient statistics:
Matrix range [1e+00, 5e+00]
QMatrix range [1e+00, 1e+01]
QLMatrix range [1e+00, 4e+00]
Objective range [1e+00, 1e+00]
Bounds range [3e+00, 4e+01]
RHS range [2e+00, 4e+01]
Presolve removed 5 rows and 3 columns
Continuous model is non-convex -- solving as a MIP
Presolve removed 6 rows and 4 columns
Presolve time: 0.00s
Explored 0 nodes (0 simplex iterations) in 0.00 seconds (0.00 work units)
Thread count was 1 (of 16 available processors)
Solution count 0
Model is infeasible or unbounded
Best objective -, best bound -, gap -
This time, the model is reported as either infeasible or unbounded. I suspect that this is because in the original algorithm, I've solved the instance with an alternative objective, so Gurobi knows of a feasible solution, and therefore knows that the model cannot be infeasible.
Interestingly, though, if I solve the same problem (with the original objective) on another machine that I have not yet upgraded to Gurobi 12, I get the following output:
Set parameter Username
Academic license - for non-commercial use only - expires 2025-01-04
Read LP format model from file Killer_prob.lp
Reading time = 0.00 seconds
: 6 rows, 8 columns, 33 nonzeros
Gurobi Optimizer version 11.0.3 build v11.0.3rc0 (linux64 - "Linux Mint 20")
CPU model: Intel(R) Core(TM) i3-1005G1 CPU @ 1.20GHz, instruction set [SSE2|AVX|AVX2|AVX512]
Thread count: 2 physical cores, 4 logical processors, using up to 4 threads
Optimize a model with 6 rows, 8 columns and 33 nonzeros
Model fingerprint: 0x071f2b92
Model has 2 quadratic constraints
Coefficient statistics:
Matrix range [1e+00, 5e+00]
QMatrix range [1e+00, 1e+01]
QLMatrix range [1e+00, 4e+00]
Objective range [1e+00, 1e+00]
Bounds range [3e+00, 4e+01]
RHS range [2e+00, 4e+01]
Presolve removed 5 rows and 3 columns
Continuous model is non-convex -- solving as a MIP
Presolve removed 5 rows and 5 columns
Presolve time: 0.00s
Presolved: 4 rows, 3 columns, 9 nonzeros
Presolved model has 1 bilinear constraint(s)
Variable types: 3 continuous, 0 integer (0 binary)
Found heuristic solution: objective 23.3571429
Root relaxation: objective 2.237513e+01, 2 iterations, 0.00 seconds (0.00 work units)
Nodes | Current Node | Objective Bounds | Work
Expl Unexpl | Obj Depth IntInf | Incumbent BestBd Gap | It/Node Time
0 0 22.37513 0 1 23.35714 22.37513 4.20% - 0s
0 0 23.26162 0 1 23.35714 23.26162 0.41% - 0s
0 2 23.32335 0 1 23.35714 23.32335 0.14% - 0s
Explored 7 nodes (4 simplex iterations) in 0.00 seconds (0.00 work units)
Thread count was 4 (of 4 available processors)
Solution count 1: 23.3571
Optimal solution found (tolerance 1.00e-04)
Best objective 2.335714285714e+01, best bound 2.335659092148e+01, gap 0.0024%
Any insight you can provide would be appreciated!
-
Thanks for reporting this issue. I'll open a support ticket on your behalf so we can investigate further.
0 -
Thanks, Eli. I appreciate it!
0
Please sign in to leave a comment.
Comments
2 comments