Font size

NO Warehouses VS Cross-Docks Optimization

In this example, we will learn how to create restrictions for the Network Optimization to identify the optimal warehouse/cross-dock combination for the network. The restrictions will be defined using Indicator Constraints, Linear Ranges, and boolean variables from the Custom Constraints table.

Problem definition

We will consider the supply chain in the United States comprising:

  • Supplier in San Diego supplying DCs.
  • DCs supplying 10 customers on the territory of the USA.

In this example, some of these DCs may serve as cross-docks (transshipment-only facility) for certain products, and as warehouses holding safety stock for others. For a given product, if a DC is supplied from a Supplier, it should work as a warehouse and hold a safety stock, otherwise it should serve as a cross-dock.

The supply chain deals with fish tin: Tuna, Clams, Crabmeat, Sardines, Shrimp, Oysters.

  • IF the product throughput from the supplier to a site or from a site to a site is greater than 0, the required product inventory is 50.
  • A site’s Max Stock is 150.
  • There is no transportation cost between supplier and sites.
  • Transportation cost between sites is less than transportation cost between sites and customers.

Define which of the sites are cross-docks and which are warehouses with safety stock considering restrictions.


The general idea of implementing the restrictions is to use boolean variables to separate the existence of the flow.

  • If the value of the boolean variable is 0 — there is no flow.
  • If the value of the boolean variable is 1 — the flow exists and the facility should have a safety stock.

For better understanding of the solution, you can read the NO DC Minimum Storage Amount (with Indicator Constraints) example.

Defined constraints

According to the solution we considered several steps:

  1. We labeled every product flow (from supplier to the sites and between the sites) and every product storage for all sites. These labels will be used later to define constraints.
  2. We created boolean variables in the Custom Constraints table for each flow we labeled in the 1 step.

  3. We created Linear Ranges for each labeled Product Storage and specified the amount of safety stock this warehouse must have if the flow through it exists.

  4. We also created a linear range for each boolean variable, and set its value to 0 or 1.

  5. We created Linear ranges for each labeled flow and specified the values for existence and nonexistence.

  6. And finally, we defined If and Then statements from the Solution section in the Indicator Constraints table. Where If and Then parts are previously defined as Linear Ranges.

The main constraint on the site’s max stock is defined in the Product Storages table. Here we specified that the maximum amount of all products each site can store is 150. If this amount is exceeded, a fine of $10 000 000 is to be paid for each overstocked product.

  • The Albuquerque site does not get supplies from San Diego, it only forwards products from Salt Lake City and Casper to Phoenix customer, serving as a cross-dock.
  • Sites in Salt Lake City, Kansas City, Dallas, and Casper are used as cross-docks for half of the products and as warehouses for the rest of them.
  • The defined maximum capacity constraint was not violated, and the penalties were not applied.

The Optimization Results page is opened by default. It shows the result of the experiment with all the possible combinations filtered per Profit (NetOpt) statistics column. The top record of the table is the best one.
The data on other details is shown in the corresponding tables:

How can we improve this article?