ERGO-Code / HiGHS

Linear optimization software
MIT License
992 stars 184 forks source link

Unbounded problem not correctly identified #1962

Closed datejada closed 1 month ago

datejada commented 1 month ago

Hi HiGHS team,

The attached .lp file in this .zip file unbounded-problem.zip has a MIP problem that it is unbounded, but HiGHS fails to detect it before going into the B&B, and then after a couple of iterations it freezes and no extra information is given (e.g., warning or error). We detected that the problem was unbounded due to the variables flow_(ccgt,_demand),_2030,XXX,YYY. Although the root cause is a problem in the data of the problem, it would be interesting to get a message from the solver indicating the unbounded condition from the start. Below is all the information to reproduce the error:

  [87dc4568] HiGHS v1.9.3
  [4076af6c] JuMP v1.23.2
using JuMP
using HiGHS

model = read_from_file("unbounded-problem.lp")
set_optimizer(model, HiGHS.Optimizer)
optimize!(model)
A JuMP Model
├ solver: none
├ objective_sense: MIN_SENSE
│ └ objective_function_type: AffExpr
├ num_variables: 1102
├ num_constraints: 2703
│ ├ AffExpr in MOI.EqualTo{Float64}: 216
│ ├ AffExpr in MOI.GreaterThan{Float64}: 288
│ ├ AffExpr in MOI.LessThan{Float64}: 1224
│ ├ VariableRef in MOI.GreaterThan{Float64}: 957
│ ├ VariableRef in MOI.Interval{Float64}: 1
│ └ VariableRef in MOI.Integer: 17
└ Names registered in the model: none

Running HiGHS 1.7.2 (git hash: 5ce7a2753): Copyright (c) 2024 HiGHS under MIT licence terms
Coefficient ranges:
  Matrix [1e-01, 4e+02]
  Cost   [3e-02, 4e+04]
  Bound  [2e+01, 2e+01]
  RHS    [9e-02, 1e+03]
Presolving model
1296 rows, 706 cols, 4032 nonzeros  0s
936 rows, 346 cols, 3600 nonzeros  0s 
543 rows, 341 cols, 2135 nonzeros  0s 
543 rows, 339 cols, 2135 nonzeros  0s

Solving MIP model with:
   543 rows
   339 cols (0 binary, 11 integer, 0 implied int., 328 continuous)
   2135 nonzeros

        Nodes      |    B&B Tree     |            Objective Bounds              |  Dynamic Constraints |       Work
     Proc. InQueue |  Leaves   Expl. | BestBound       BestSol              Gap |   Cuts   InLp Confl. | LpIters     Time

         0       0         0   0.00%   -inf            inf                  inf        0      0      0         0     0.0s
 C       2       0         2 100.00%   -inf            -75737988.86364    Large        0      0      0       439     0.0s
 S       3       0         3 100.00%   -inf            -176187988.8931    Large        0      0      0       574     0.1s
 L       3       0         3 100.00%   -inf            -176189166.7404    Large        0      0      0       574     0.1s

I hope all this information helps you to reproduce and improve the current HiGHS version.

BR,

Diego

jajhall commented 1 month ago

Interesting. I'll look into how the solver interprets an unbounded LP at a (the root) node.

datejada commented 1 month ago

If it helps, we also double-checked that the problem is unbounded using a commercial solver. Thanks!

jajhall commented 1 month ago

We should have a unit test for unbounded MIPs, but might not. May make it easier to debug with a simple problem and presolve off

jajhall commented 1 month ago

We do have a couple of unit tests for unbounded MIPs, so identifying what's wrong is non-trivial

jajhall commented 1 month ago

Closed by #1990

jajhall commented 1 month ago

Needs a sanity check on MIP test problems, but this is another example to log for BE @odow

odow commented 1 month ago

Perhaps we should make a label to tag all these issues with?

jajhall commented 1 month ago

Perhaps we should make a label to tag all these issues with?

Done!

jajhall commented 1 month ago

Closed by #1980