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 — Type
Analyzer() <: 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 — Type
AbstractInfeasibilitylIssueAbstract type for infeasibility issues found during the analysis of a model.
sourceSpecifically, the possible issues are:
MathOptAnalyzer.Infeasibility.InfeasibleBounds — Type
InfeasibleBounds{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 — Type
InfeasibleIntegrality{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
)sourceMathOptAnalyzer.Infeasibility.InfeasibleConstraintRange — Type
InfeasibleConstraintRange{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
)sourceMathOptAnalyzer.Infeasibility.IrreducibleInfeasibleSubset — Type
IrreducibleInfeasibleSubset <: 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
)sourceThese issues are saved in the data structure that is returned from the MathOptAnalyzer.analyze function:
MathOptAnalyzer.Infeasibility.Data — Type
Data <: 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.