Network Optimization infeasibility diagnosis guide
Once the solver has reported an infeasibility, you need to identify the type of infeasibility that is causing the issue, then use a logical approach to resolve the problem.
The following are general causes of infeasibility:
- Structural
- Flow/throughput
- Count constraints
- Conflicting constraints
- Multi-period/pre-build
- Numerical
In the sections that follow, causes of infeasibility and steps you can use to resolve the infeasibility are provided. Refer to Network Optimization Infeasibility Diagnosis options for a description of the specific options used with Network Optimization Infeasibility Diagnosis.
In addition to the steps listed to resolve infeasibility, you can use the Skip Objective Function option on the Advanced Options in Network Optimization options. If you are analyzing infeasibility, you may want to try creating a feasible, but not necessarily optimal solution. You can select the Skip Objective Function option to prevent the design engine from trying to build the objective function.

Infeasibility based on structural issues occurs when there is an incomplete path from the location of the production policy to the customer. When the path is incomplete, demand cannot be satisfied.
When you run Network Optimization that is reported as "Failed", review the solve log. If demand lacks a valid shipment lane to fulfill it, you see an error message such as:
No shipment lane to satisfy demand 1 for customer CZ_10 and product PACK_01 in period 1.
Run Infeasibility Diagnosis with "Diagnose model structure" selected. The Customer Flows, InterSite Flows, and Production Flows identify missing structural elements with values including "DIAGNOSTIC" (such as "DIAGNOSTIC_SOURCE").
Structural infeasibility causes:
- Missing policies (production, site sourcing, customer sourcing and transportation policies).
- Missing products, or incorrectly named or excluded products.
- Missing sites, or incorrectly named or excluded sites.
DIAGNOSTIC_SOURCE
If product comes from the diagnostic source, it indicates that the model may violate a source capacity constraint. The maximum constraints may be too low. For example, assume you have:
-
Customer demand = 20
-
Max Flow DC1 -> Customer = 10
-
Max Flow DC2 -> Customer = 5
Customer demand is 5 units greater than the total flow. Therefore, you see:
DIAGNOSTIC_SOURCE to Customer: 5 units
This is not only related to capacity constraints, but also to missing policies or no Transportation Policies.
DIAGNOSTIC_DESTINATION
If product goes to the diagnostic destination, it indicates that flow is being forced to a destination that cannot hold product or a customer that is not demanding anything. It may be that minimum constraints upstream are too high. For example, assume you have:
-
Customer demand = 20
-
Minimum flow from the MFG site -> DC = 30
-
The DC does not stock product
10 units are being sent to the DC that cannot be held at the DC and are not demanded by the customer. Therefore, you see:
DC to DIAGNOSTIC_DESTINATION: 10 units
DIAGNOSTIC_PRODUCTION_STEP
If product goes through the diagnostic production step, it indicates that there is more or less production than required by the model. Production constraints may be forcing an infeasible amount of production.
For example, if a "missing_link" with a "Diagnostic_Source" appears in the Constraints Summary table after running the "Diagnose model structure" infeasibility diagnosis, check the Transportation Policies, Site Sourcing Policies, and Production Policies using the information provided in the Constraints Summary about the missing links.
Similarly, if a "missing_link" with a "Diagnostic_Destination" appears in the Constraints Summary table, check for missing Transportation Policies or Customer Sourcing Policies.

Infeasibility based on flow or throughput issues occurs when there are constraints in the model that are too tight. This causes demand flow to try to use an invalid or missing path as an alternative.
Flow/throughput infeasibility causes:
- Flow constraint requirements that are too high.
- Flow constraint requirements that are too low.
- Site Throughput constraints that are too low.
Resolving flow/throughput infeasibility:
- Run Diagnose constraints to determine which constraints are causing the infeasibility.
- Run Sequential Optimization on the constraint types identified in step 1 (through diagnose constraints). This will indicate how much the constraint is over- or under-constraining the flows.
- Correct the constraint requirements that are causing the infeasibility.

Infeasibility based on count constraint issues occurs when there are constraints defined for a group of sites, customers, products, or modes that are not feasible.
Count constraint infeasibility causes:
- Capacities conflict with counts.
- Max sourcing locations do not match availability, or the capacities on locations are too restrictive.
- Count does not match the number of available sites in the network.
Resolving count constraint infeasibility:
- Run Diagnose constraints to determine which count constraints are causing the infeasibility.
- Correct the count constraints that are causing the infeasibility.

In these cases, constraints may conflict with each other, resulting in infeasibility. For example, you may have a production maximum at the MFG = 10, but a required flow from the MFG of 12 across the model horizon.
Potential causes of conflicting constraint infeasibility:
- Minimum versus maximum constraints that do not overlap.
- Flows forced through policies that do not exist, or have been excluded.
- Upstream flow constraints that do not match downstream flow constraints.
- Capacities that do not match minimum flow constraints.
Resolving conflicting constraint infeasibility:
- Run Diagnose constraints to determine which constraints are causing the infeasibility.
- Run Sequential Optimization on the constraint types identified in step 1 (through diagnose constraints). This will provide additional information about how constraints are conflicting.
- Correct the constraints that are in conflict.

Infeasibility based on multi-period or pre-build issues occurs when lead times are longer than period lengths. As a result, the model runs out of time before stock can be built.
Multi-period/pre-build infeasibility causes:
- Demand occurs in period 1, but the lead time for the product to be made and shipped to the customer is longer than the period length.
- Lack of inventory policies to store the pre-build inventory.
Resolving multi-period/pre-build infeasibility:
- Run Diagnose Constraints to see if there is demand that is not being satisfied in Period 1.
- Add a significant amount of Initial Inventory at the customer-facing sites. Also, select the “Allow Cross Period Flows” option on the Modeling Options tab of Network Optimization options. When you re-run the model, if it is now feasible, check the period lengths as compared to the lead times.
- Do one of the following:
- Add inventory to those sites serving customer with demand in period 1,
- Change period lengths,
- Change lead times,
- Add an extra period at the beginning of the model (to serve as a “warm-up” period).

Infeasibility based on numerical issues (also called numerical instability) occurs when there are large variations in the numbers in the model. Often, this is when there are very large and very small values in demand and the costs in the model.
Numerical infeasibility causes:
- Very large and very small numbers in costs, times, distances, etc.
- Differences in value of 106 between the smallest and largest numbers in the model. These differences affect MIP solving.
Resolving numerical infeasibility:
- Re-run the model with the “Handle using logic constraints” option selected on the Advanced Settings tab of Network Optimization options. This method ignores the Big M method of dealing with model bounds and will take longer to solve. If the infeasibility is due to numerical instability, the model will now solve.
- Consider changing the Presolve setting on the Solver Settings tab to “Use all except integer reductions” and re-run the model. This option makes the presolve operation fix fewer integer variables and avoid some numerical infeasibility. It may also increase the solve time.
Last modified: Wednesday May 15, 2024