Troubleshooting With the Infeasibility Diagnostic Engine
Sometimes, the cause of infeasibility is not immediately clear. Especially as we build more and more complex models with several constraints, infeasibility could come from several different sources.
One great tool is Infeasibility Diagnostic Engine. In the “Run” menu, you can select this tool under the Neo engine dropdown.
Running the infeasibility diagnostic engine can allow the model to optimize even if the current constraints cause infeasibility. Generally, this engine adds slack variables to each of the constraints in our model, which allow it to solve.
Adding slack variables means that the infeasibility diagnostic is solving an optimization problem focused on feasibility, not cost. The goal of this augmented model is to minimize the slack variables. By minimizing the slack variables needed to solve the model, this diagnostic tool can find:
- Which constraints are violated, and…
- By how much
If constraint relaxation is enough to allow the model to solve, the model will show as “Done” in the Run Manager.
The “slack” results will show in the OptimizationConstraintSummary table.
In this example there are no transportation lanes to CUST_Phoenix, so we cannot fulfill that demand constraint. The model is telling us that a way to make this feasible is to change the demand constraint to be 0.
In general, infeasibility is a very complex topic, so the infeasibility diagnostic tool cannot catch or relax all potential infeasibility causes, but it is a very useful place to start.