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:
MathOptAnalyzer.Infeasibility.Analyzer — TypeAnalyzer() <: MathOptAnalyzer.AbstractAnalyzerThe Analyzer type is used to perform infeasibility analysis on a model.
Example
julia> data = MathOptAnalyzer.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:
MathOptAnalyzer.Infeasibility.AbstractInfeasibilitylIssue — TypeAbstractInfeasibilitylIssueAbstract type for infeasibility issues found during the analysis of a model.
Specifically, the possible issues are:
MathOptAnalyzer.Infeasibility.InfeasibleBounds — TypeInfeasibleBounds{T} <: AbstractInfeasibilitylIssueThe InfeasibleBounds issue is identified when a variable has a lower bound that is greater than its upper bound.
For more information, run: julia julia> MathOptAnalyzer.summarize(MathOptAnalyzer.Infeasibility.InfeasibleBounds)`
MathOptAnalyzer.Infeasibility.InfeasibleIntegrality — TypeInfeasibleIntegrality{T} <: AbstractInfeasibilitylIssueThe 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> MathOptAnalyzer.summarize(
MathOptAnalyzer.Infeasibility.InfeasibleIntegrality
)MathOptAnalyzer.Infeasibility.InfeasibleConstraintRange — TypeInfeasibleConstraintRange{T} <: AbstractInfeasibilitylIssueThe 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> MathOptAnalyzer.summarize(
MathOptAnalyzer.Infeasibility.InfeasibleConstraintRange
)MathOptAnalyzer.Infeasibility.IrreducibleInfeasibleSubset — TypeIrreducibleInfeasibleSubset <: AbstractInfeasibilitylIssueThe 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> MathOptAnalyzer.summarize(
MathOptAnalyzer.Infeasibility.IrreducibleInfeasibleSubset
)These issues are saved in the data structure that is returned from the MathOptAnalyzer.analyze function:
MathOptAnalyzer.Infeasibility.Data — TypeData <: MathOptAnalyzer.AbstractDataThe 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.