Closed
Description
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
Labels
No labels