Skip to content

IIS: MethodError: no method matching _verbose_summarize(::Base.TTY, ::Type{ModelAnalyzer.Infeasibility.InfeasibleConstraintRange}) #33

Closed
@datejada

Description

@datejada

The attached LP file comes from a large case, we also know why it is infeasible. The model analyser throws an error, but I can get the IIS from Gurobi. This is the code:

link to download file: https://filesender.surf.nl/?s=download&token=9c1947ed-5539-4591-b2e6-25d750dd1f89

using JuMP
using ModelAnalyzer
using HiGHS

# Create a JuMP model from lp file from OBZ case study
model = read_from_file("model_benchmark_rerun-infeasible.mps")
set_optimizer(model, HiGHS.Optimizer)
optimize!(model)

# Infeasibility analysis (if the model was infeasible)
data = ModelAnalyzer.analyze(
    ModelAnalyzer.Infeasibility.Analyzer(),
    model,
    optimizer=HiGHS.Optimizer,
)

# print report to the screen
ModelAnalyzer.summarize(data)

This is the error:

        
Running HiGHS 1.10.0 (git hash: fd8665394e): Copyright (c) 2025 HiGHS under MIT licence terms
LP   has 7253280 rows; 5842920 cols; 14944513 nonzeros
Coefficient ranges:
  Matrix [9e-01, 2e+00]
  Cost   [1e-02, 1e+00]
  Bound  [4e-04, 1e+05]
  RHS    [6e-05, 1e+09]
Presolving model
Problem status detected on presolve: Infeasible
Model status        : Infeasible
Objective value     :  0.0000000000e+00
HiGHS run time      :         25.84
Solving LP to try to compute dual ray
LP   has 7253280 rows; 5842920 cols; 14944513 nonzeros
Coefficient ranges:
  Matrix [9e-01, 2e+00]
  Cost   [0e+00, 0e+00]
  Bound  [4e-04, 1e+05]
  RHS    [6e-05, 1e+09]
Solving LP without presolve, or with basis, or unconstrained
Using EKK dual simplex solver - serial
  Iteration        Objective     Infeasibilities num(sum)
          0     7.7431120628e-02 Pr: 849144(5.35559e+11); Du: 0(3.39972e-07) 59s
        161     7.6204395780e+03 Pr: 848983(5.26441e+11); Du: 0(3.39972e-07) 65s
        161     7.6204395780e+03 65s
Model status        : Infeasible
Simplex   iterations: 161
Objective value     :  0.0000000000e+00
Relative P-D gap    :  7.6204395780e+03
HiGHS run time      :         66.03
Solving linear system to compute dual ray

Infeasibility analysis found 2189 issues

## Infeasibility Analysis



ERROR: MethodError: no method matching _verbose_summarize(::Base.TTY, ::Type{ModelAnalyzer.Infeasibility.InfeasibleConstraintRange})
The function `_verbose_summarize` exists, but no method is defined for this combination of argument types.

Closest candidates are:
  _verbose_summarize(::IO, ::Type{ModelAnalyzer.Numerical.NonconvexQuadraticObjective})
   @ ModelAnalyzer C:\Users\tejadaarangoda\.julia\packages\ModelAnalyzer\Sta4E\src\numerical.jl:1750
  _verbose_summarize(::IO, ::Type{ModelAnalyzer.Numerical.VariableNotInConstraints})
   @ ModelAnalyzer C:\Users\tejadaarangoda\.julia\packages\ModelAnalyzer\Sta4E\src\numerical.jl:1274
  _verbose_summarize(::IO, ::Type{ModelAnalyzer.Numerical.VariableBoundAsConstraint})
   @ ModelAnalyzer C:\Users\tejadaarangoda\.julia\packages\ModelAnalyzer\Sta4E\src\numerical.jl:1337
  ...

Stacktrace:
 [1] summarize(io::Base.TTY, ::Type{ModelAnalyzer.Infeasibility.InfeasibleConstraintRange}; verbose::Bool)
   @ ModelAnalyzer C:\Users\tejadaarangoda\.julia\packages\ModelAnalyzer\Sta4E\src\ModelAnalyzer.jl:75
 [2] summarize(io::Base.TTY, issues::Vector{…}; model::Nothing, verbose::Bool, max_issues::Int64)
   @ ModelAnalyzer C:\Users\tejadaarangoda\.julia\packages\ModelAnalyzer\Sta4E\src\ModelAnalyzer.jl:111
 [3] summarize(io::Base.TTY, data::ModelAnalyzer.Infeasibility.Data; model::Nothing, verbose::Bool, max_issues::Int64)
   @ ModelAnalyzer.Infeasibility C:\Users\tejadaarangoda\.julia\packages\ModelAnalyzer\Sta4E\src\infeasibility.jl:862
 [4] summarize(io::Base.TTY, data::ModelAnalyzer.Infeasibility.Data)
   @ ModelAnalyzer.Infeasibility C:\Users\tejadaarangoda\.julia\packages\ModelAnalyzer\Sta4E\src\infeasibility.jl:850
 [5] summarize(data::ModelAnalyzer.Infeasibility.Data; kwargs::@Kwargs{})
   @ ModelAnalyzer C:\Users\tejadaarangoda\.julia\packages\ModelAnalyzer\Sta4E\src\ModelAnalyzer.jl:136
 [6] summarize(data::ModelAnalyzer.Infeasibility.Data)
   @ ModelAnalyzer C:\Users\tejadaarangoda\.julia\packages\ModelAnalyzer\Sta4E\src\ModelAnalyzer.jl:135
 [7] top-level scope
   @ c:\Users\tejadaarangoda\OneDrive - TNO\00_Sandbox\TestModelAnalyzer\test-infesiable-model.jl:20
Some type information was truncated. Use `show(err)` to see complete types.

This is code when using Gurobi:

using Gurobi
set_optimizer(model, Gurobi.Optimizer)
optimize!(model)
compute_conflict!(model)
if get_attribute(model, MOI.ConflictStatus()) == MOI.CONFLICT_FOUND
    iis_model, reference_map = copy_conflict(model)
    print(iis_model)
end

This is the output:

Gurobi Optimizer version 12.0.2 build v12.0.2rc0 (win64 - Windows 11.0 (26100.2))

CPU model: 12th Gen Intel(R) Core(TM) i7-1255U, instruction set [SSE2|AVX|AVX2]
Thread count: 10 physical cores, 12 logical processors, using up to 12 threads

Optimize a model with 7253280 rows, 5842920 columns and 14944513 nonzeros
Model fingerprint: 0xd2486961
Coefficient statistics:
  Matrix range     [9e-01, 2e+00]
  Objective range  [1e-02, 1e+00]
  Bounds range     [4e-04, 1e+05]
  RHS range        [6e-05, 1e+09]
Presolve removed 5504565 rows and 25915 columns
Presolve time: 1.91s

Solved in 0 iterations and 1.91 seconds (1.13 work units)
Infeasible model

User-callback calls 19, time in user-callback 0.00 sec

Gurobi Optimizer version 12.0.2 build v12.0.2rc0 (win64 - Windows 11.0 (26100.2))

CPU model: 12th Gen Intel(R) Core(TM) i7-1255U, instruction set [SSE2|AVX|AVX2]
Thread count: 10 physical cores, 12 logical processors, using up to 12 threads


IIS computed: 1 constraints and 1 bounds
IIS runtime: 0.36 seconds (0.00 work units)

Min flow[(NL_E_ENS,NL_E_Demand),2050,1,1:1] + flow[(NL_E_ENS,NL_E_Demand),2050,1,2:2] + flow[(NL_E_ENS,NL_E_Demand),2050,1,3:3] + flow[(NL_E_ENS,NL_E_Demand),2050,1,4:4] + flow[(NL_E_ENS,NL_E_Demand),2050,1,5:5] + flow[(NL_E_ENS,NL_E_Demand),2050,1,6:6] + flow[(NL_E_ENS,NL_E_Demand),2050,1,7:7] + flow[(NL_E_ENS,NL_E_Demand),2050,1,8:8] + flow[(NL_E_ENS,NL_E_Demand),2050,1,9:9] + flow[(NL_E_ENS,NL_E_Demand),2050,1,10:10] + flow[(NL_E_ENS,NL_E_Demand),2050,1,11:11] + flow[(NL_E_ENS,NL_E_Demand),2050,1,12:12] + flow[(NL_E_ENS,NL_E_Demand),2050,1,13:13] + flow[(NL_E_ENS,NL_E_Demand),2050,1,14:14] + flow[(NL_E_ENS,NL_E_Demand),2050,1,15:15] + flow[(NL_E_ENS,NL_E_Demand),2050,1,16:16] + flow[(NL_E_ENS,NL_E_Demand),2050,1,17:17] + flow[(NL_E_ENS,NL_E_Demand),2050,1,18:18] + flow[(NL_E_ENS,NL_E_Demand),2050,1,19:19] + flow[(NL_E_ENS,NL_E_Demand),2050,1,20:20] + flow[(NL_E_ENS,NL_E_Demand),2050,1,21:21] + flow[(NL_E_ENS,NL_E_Demand),2050,1,22:22] + flow[(NL_E_ENS,NL_E_Demand),2050,1,23:23] + flow[(NL_E_ENS,NL_E_Demand),2050,1,24:24] + flow[(NL_E_ENS,NL_E_Demand),2050,1,25:25] + flow[(NL_E_ENS,NL_E_Demand),2050,1,26:26] + flow[(NL_E_ENS,NL_E_Demand),2050,1,27:27] + flow[(NL_E_ENS,NL_E_Demand),2050,1,28:28] + flow[(NL_E_ENS,NL_E_Demand),2050,1,29:29] + flow[(NL_E_ENS,NL_E_Demand),2050,1,30:30] + [[...1892100 terms omitted...]] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8731:8731] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8732:8732] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8733:8733] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8734:8734] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8735:8735] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8736:8736] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8737:8737] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8738:8738] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8739:8739] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8740:8740] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8741:8741] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8742:8742] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8743:8743] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8744:8744] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8745:8745] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8746:8746] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8747:8747] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8748:8748] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8749:8749] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8750:8750] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8751:8751] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8752:8752] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8753:8753] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8754:8754] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8755:8755] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8756:8756] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8757:8757] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8758:8758] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8759:8759] + flow[(BORROW_WATER,CZ_Hydro_Reservoir),2050,1,8760:8760]
Subject to
 min_storage_level_rep_period_limit[CH_Pump_Hydro_Open,2050,1,24:24] : storage_level_rep_period[CH_Pump_Hydro_Open,2050,1,24:24] >= 4.49598226e6
 storage_level_rep_period[CH_Pump_Hydro_Open,2050,1,24:24] == 5275.651480144636

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions