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.AnalyzerType
Analyzer() <: 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.

source

The analysis will return issues of the abstract type:

Specifically, the possible issues are:

ModelAnalyzer.Infeasibility.InfeasibleBoundsType
InfeasibleBounds{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)`

source
ModelAnalyzer.Infeasibility.InfeasibleIntegralityType
InfeasibleIntegrality{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
)
source
ModelAnalyzer.Infeasibility.InfeasibleConstraintRangeType
InfeasibleConstraintRange{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
)
source
ModelAnalyzer.Infeasibility.IrreducibleInfeasibleSubsetType
IrreducibleInfeasibleSubset <: 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
)
source

These issues are saved in the data structure that is returned from the ModelAnalyzer.analyze function:

ModelAnalyzer.Infeasibility.DataType
Data <: 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.

source