MathOptIIS.jl is a basic IIS solver for MathOptInterface.jl.
MathOptIIS.jl
is licensed under the MIT License.
If you need help, please ask a question on the JuMP community forum.
If you have a reproducible example of a bug, please open a GitHub issue.
Install MathOptIIS
using Pkg.add
:
import Pkg
Pkg.add("MathOptIIS")
This package is not intended to be called directly from user-code. Instead, it should be added as a dependency to solver wrappers that want to provide an IIS.
To add to an existing wrapper, add a new field:
conflict_solver::Union{Nothing,MathOptIIS.Optimizer}
Then, add the following methods:
function MOI.compute_conflict!(model::Optimizer)
solver = MathOptIIS.Optimizer()
MOI.set(solver, MathOptIIS.InfeasibleModel(), model)
MOI.set(solver, MathOptIIS.InnerOptimizer(), Optimizer)
MOI.compute_conflict!(solver)
model.conflict_solver = solver
return
end
function MOI.get(optimizer::Optimizer, attr::MOI.ConflictStatus)
if optimizer.conflict_solver === nothing
return MOI.COMPUTE_CONFLICT_NOT_CALLED
end
return MOI.get(optimizer.conflict_solver, attr)
end
function MOI.get(
optimizer::Optimizer,
attr::MOI.ConstraintConflictStatus,
con::MOI.ConstraintIndex,
)
return MOI.get(optimizer.conflict_solver, attr, con)
end
The optimization community consistently uses "IIS", but they have not standardized on what the acronym stands for. We have seen:
- Irreducible Infeasible Set
- Irreducibly Inconsistent Set
- Irreducible Infeasible Subsystem
- Infeasible Irreducible System
- Irreducible Inconsistent Subsystem
- Irreducibly Inconsistent System
So we choose the name MathOptIIS, and you can decide what the acronym stands for.