https://github.com/jump-dev/mathoptiis.jl
A simple irreducible infeasible subsystem solver for MathOptInterface.jl
https://github.com/jump-dev/mathoptiis.jl
Last synced: about 1 month ago
JSON representation
A simple irreducible infeasible subsystem solver for MathOptInterface.jl
- Host: GitHub
- URL: https://github.com/jump-dev/mathoptiis.jl
- Owner: jump-dev
- License: mit
- Created: 2025-05-29T04:17:17.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2025-11-03T20:16:58.000Z (5 months ago)
- Last Synced: 2026-02-08T10:56:38.216Z (about 1 month ago)
- Language: Julia
- Homepage:
- Size: 58.6 KB
- Stars: 13
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# MathOptIIS.jl
[](https://github.com/jump-dev/MathOptIIS.jl/actions?query=workflow%3ACI)
[](https://codecov.io/gh/jump-dev/MathOptIIS.jl)
[MathOptIIS.jl](https://github.com/jump-dev/MathOptIIS.jl) is a basic IIS solver
for MathOptInterface.jl.
## License
`MathOptIIS.jl` is licensed under the [MIT License](https://github.com/jump-dev/MultiObjectiveAlgorithms.jl/blob/main/LICENSE.md).
## Getting help
If you need help, please ask a question on the [JuMP community forum](https://jump.dev/forum).
If you have a reproducible example of a bug, please [open a GitHub issue](https://github.com/jump-dev/MathOptIIS.jl/issues/new).
## Installation
Install `MathOptIIS` using `Pkg.add`:
```julia
import Pkg
Pkg.add("MathOptIIS")
```
## Usage
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:
```julia
conflict_solver::Union{Nothing,MathOptIIS.Optimizer}
```
Then, add the following methods:
```julia
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 name
The optimization community consistently uses "IIS", but they have not
standardized on what the acronym stands for. We have seen:
1. Irreducible Infeasible Set
2. Irreducibly Inconsistent Set
3. Irreducible Infeasible Subsystem
4. Infeasible Irreducible System
5. Irreducible Inconsistent Subsystem
6. Irreducibly Inconsistent System
So we choose the name MathOptIIS, and you can decide what the acronym stands for.