Circular Flow

This section explains how the page Circular Flow works in the application. This page becomes visible only if you clicked on the Optimize button, the model can be solved, but the resulting solution contains one or more circular flows. In this case, the page Circular Flow helps you understand why circular flows appear in the solution.

How it works

When the post solve calculation detects a circular flow problem, a warning message is displayed. In this case, you can choose to go to the Circular Flow page for help in understanding why circular flows appear in the solution.


At this stage the Circular Flow step becomes visible in the Workflow menu:


When you navigate to the Circular Flow page you can find a map and a table which shows the circular flows:


There is a filter Circle on the page, where you can select the circular flow(s) that you would like to show on the map and in the table.

Each row in the Circular Flows table represents a location or a transport lane in a circular flow. The first column shows the number of the circle, the second column shows the order of the element in the circular flow. The next columns are containing the Product, From Location, To Location, and Period combination that defines the element. If the element is a node, the From Location and To Location indices are the same.

The value columns of the table are containing potentially helpful information about the circular flows:
  • The volume of the circular flow at that element.

  • Variable cost per UOM applied at that location or on that lane.

  • Variable revenue per UOM applied at that location or on that lane.

  • Minimum capacity or base case volume specified at that location or on that lane.

  • Indicator if the minimum capacity is specified on a group.

If you click on an element in the in the Circular Flows table, the represented location or a transport lane will be highlighted on the map. Only lanes for the selected period are visible on the map. To select another period, click on a row with that period.

All these information can be helpful to find the cause of the circular flow and fix the input data to avoid these kind of unintended flows.

How to avoid circular flows

A circular flow is that for a certain product, part of the volume will go around in a circle. The most simple circle is that a product is going from A to B, and back from B to A, but eventually more locations can be part of the circle. Circular flows can only be formed among warehouses, as suppliers do not have inflows and customers do not have outflows.

Circular flows are typically not intended, because not sending that product around would be a more efficient solution, and as a result the data on the Cost to Serve and End to End page is incorrect. In general, a circular flow can have three causes:
  • There is a minimum capacity or base case volume in a circle.

  • The revenue is greater than cost on a circle.

  • There is unconstrained throughput or a transport lane without cost in the network.

Minimum Capacity

If there is a minimum capacity specified on a warehouse or a lane, but it is not fitting in the optimal solution, the model may find a circle to send the product through. This way it meets the minimum capacity constraint for free or on a lower cost compared to the cost of the network that is not optimal.

To avoid this, make sure to specify meaningful and realistic minimum capacities or base case volumes, especially at warehouses and on lanes between warehouses.

Revenue is greater than cost

If there is a circle in the network where revenue is greater than cost, the model may send some product(s) around the circle to make higher profit.

To avoid this, make sure that this situation is not present among warehouses. Best practice may be to specify more revenue than cost only at customer locations or on lanes going to customers.

Unconstrained network without cost

In some rare cases, circular flow can appear even without minimum capacities or greater-revenue-than-cost situations. If the network throughput and flows are not constrained and there is no cost specified around a circle, the optimization might stay in a circular flow state. It might happen, because the initial state of the network is random and the optimization might not find any benefit on changing this circular part of the network.

To avoid this, make sure to specify meaningful and realistic capacities, and specify costs, especially at warehouses and on lanes between warehouses.