Infeasibility Analysis
This module provides functionality to perform infeasibility analysis on a JuMP model. This module follows the main API and is activated by the struct:
ModelAnalyzer.Infeasibility.Analyzer
— TypeAnalyzer() <: ModelAnalyzer.AbstractAnalyzer
The Analyzer
type is used to perform infeasibility analysis on a model.
Example
julia> data = ModelAnalyzer.analyze(
Analyzer(),
model,
optimizer = nothing,,
)
The additional keyword argument optimizer
is used to specify the optimizer to use for the IIS resolver.
The analysis will return issues of the abstract type:
ModelAnalyzer.Infeasibility.AbstractInfeasibilitylIssue
— TypeAbstractInfeasibilitylIssue
Abstract type for infeasibility issues found during the analysis of a model.
Specifically, the possible issues are:
ModelAnalyzer.Infeasibility.InfeasibleBounds
— TypeInfeasibleBounds{T} <: AbstractInfeasibilitylIssue
The InfeasibleBounds
issue is identified when a variable has a lower bound that is greater than its upper bound.
For more information, run: julia julia> ModelAnalyzer.summarize(ModelAnalyzer.Infeasibility.InfeasibleBounds)
`
ModelAnalyzer.Infeasibility.InfeasibleIntegrality
— TypeInfeasibleIntegrality{T} <: AbstractInfeasibilitylIssue
The InfeasibleIntegrality
issue is identified when a variable has an integrality constraint (like MOI.Integer
or MOI.ZeroOne
) that is not consistent with its bounds. That is, the bounds do not allow for any integer value to be feasible.
For more information, run:
julia> ModelAnalyzer.summarize(
ModelAnalyzer.Infeasibility.InfeasibleIntegrality
)
ModelAnalyzer.Infeasibility.InfeasibleConstraintRange
— TypeInfeasibleConstraintRange{T} <: AbstractInfeasibilitylIssue
The InfeasibleConstraintRange
issue is identified when a constraint cannot be satisfied given the variable bounds. This analysis only considers one constraint at a time and all variable bounds of variables involved in the constraint. This issue can only be found is all variable bounds are consistent, that is, no issues of type InfeasibleBounds
were found in the first layer of analysis.
For more information, run:
julia> ModelAnalyzer.summarize(
ModelAnalyzer.Infeasibility.InfeasibleConstraintRange
)
ModelAnalyzer.Infeasibility.IrreducibleInfeasibleSubset
— TypeIrreducibleInfeasibleSubset <: AbstractInfeasibilitylIssue
The IrreducibleInfeasibleSubset
issue is identified when a subset of constraints cannot be satisfied simultaneously. This is typically found by the IIS resolver after the first two layers of infeasibility analysis have been completed with no issues, that is, no issues of any other type were found.
For more information, run:
julia> ModelAnalyzer.summarize(
ModelAnalyzer.Infeasibility.IrreducibleInfeasibleSubset
)
These issues are saved in the data structure that is returned from the ModelAnalyzer.analyze
function:
ModelAnalyzer.Infeasibility.Data
— TypeData <: ModelAnalyzer.AbstractData
The Data
type is used to store the results of the infeasibility analysis. This type contains vectors of the various infeasibility issues found during the analysis, including InfeasibleBounds
, InfeasibleIntegrality
, InfeasibleConstraintRange
, and IrreducibleInfeasibleSubset
.