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,
native_iis = false,
)Keyword arguments
optimizer: the optimizer to use for the IIS computation. Required for the elastic-filter (MathOptIIS) path and for the native IIS path.native_iis::Bool = false: iftrue, use the solver's built-inMOI.compute_conflict!to compute an IIS directly (e.g., Gurobi'sGRBcomputeIIS). This is typically faster but returns only a single IIS and may not categorize issues as precisely. If the solver does not support native IIS computation, a warning is emitted and the method falls back to the MathOptIIS elastic-filter path.
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.
Specifically, 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
)MathOptAnalyzer.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
)MathOptAnalyzer.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
)These 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.