This example shows how a warehouse is satisfying and planning demand for multiple stores
Supply Chain solvers become more important as a network gets larger or more complex. In this example, a warehouse needs to plan demand from three dependent stores. Warehouses exists to break bulk... they allow a company to place larger orders to a supplier at lower costs. The solver here calculates the total flow needed, netted for inventory, to meet customer demand at the store. This helps the warehouse understand expected shipment dates as well as when they need to place orders to their supplier.
The "shipments" output file here shows the expected shipments necessary to meet demand. Note the "demand_key" column helps tie the shipment activity to the respective demand. This is especially helpful for the supplier_1 to warehouse shipments as they are 1 level higher in the network and hard to infer without this "pegging" detail.
What value does this bring a distributor? The solver here ensures the distributor is ordering just enough supply at exactly the right time. The inventory for store_1 and warehouse are netted out, so the warehouse only orders 10 units of the total 13 units of store demand. If each item costs $100, the company has saved at least $300 by not over purchasing and has kept capital liquid for other uses.
Knowing the exact "arrival date" of each inbound shipment is critical too. This allows the warehouse to place orders to the supplier and consider how to aggregate inbound need into larger agregate purchase orders. Agregating flow into shipments allows a company to achieve economies of scale and pass cost savings onto the end customer.
| item | location | need_date | demand_qty |
|---|---|---|---|
| item_1 | store_1 | 5/30/2026 | 1 |
| item_1 | store_2 | 5/30/2026 | 2 |
| item_1 | store_3 | 5/30/2026 | 2 |
| item_1 | store_1 | 6/15/2026 | 4 |
| item_1 | store_2 | 6/15/2026 | 1 |
| item_1 | store_3 | 6/15/2026 | 3 |
| item | location | genesis | onhand_qty | image |
|---|---|---|---|---|
| item_1 | supplier_1 | True | 0 | supplier.png |
| item_1 | store_1 | False | 1 | store_drawing.png |
| item_1 | store_2 | False | 0 | store_drawing.png |
| item_1 | store_3 | False | 0 | store_drawing.png |
| item_1 | warehouse | False | 2 | warehouse.png |
| item | from_location | to_location | lead_time_days |
|---|---|---|---|
| item_1 | warehouse | store_1 | 10 |
| item_1 | supplier_1 | warehouse | 10 |
| item_1 | warehouse | store_2 | 5 |
| item_1 | warehouse | store_3 | 5 |
| item | location | activity | activity_date | pegged_qty | demand_key |
|---|---|---|---|---|---|
| item_1 | supplier_1 | 0_item_genesis | 2026-05-15 | 2 | 2 |
| item_1 | supplier_1 | 7_shipment_from | 2026-05-15 | 2 | 2 |
| item_1 | warehouse | 2_shipment_to | 2026-05-25 | 2 | 2 |
| item_1 | warehouse | 5_BOH_usage | 2026-05-25 | 2 | 1 |
| item_1 | warehouse | 7_shipment_from | 2026-05-25 | 2 | 1 |
| item_1 | warehouse | 7_shipment_from | 2026-05-25 | 2 | 2 |
| item_1 | supplier_1 | 0_item_genesis | 2026-05-26 | 4 | 3 |
| item_1 | supplier_1 | 7_shipment_from | 2026-05-26 | 4 | 3 |
| item_1 | store_1 | 5_BOH_usage | 2026-05-30 | 1 | 0 |
| item_1 | store_2 | 2_shipment_to | 2026-05-30 | 2 | 1 |
| item_1 | store_3 | 2_shipment_to | 2026-05-30 | 2 | 2 |
| item_1 | supplier_1 | 0_item_genesis | 2026-05-31 | 1 | 4 |
| item_1 | supplier_1 | 0_item_genesis | 2026-05-31 | 3 | 5 |
| item_1 | supplier_1 | 7_shipment_from | 2026-05-31 | 1 | 4 |
| item_1 | supplier_1 | 7_shipment_from | 2026-05-31 | 3 | 5 |
| item_1 | warehouse | 2_shipment_to | 2026-06-05 | 4 | 3 |
| item_1 | warehouse | 7_shipment_from | 2026-06-05 | 4 | 3 |
| item_1 | warehouse | 2_shipment_to | 2026-06-10 | 1 | 4 |
| item_1 | warehouse | 2_shipment_to | 2026-06-10 | 3 | 5 |
| item_1 | warehouse | 7_shipment_from | 2026-06-10 | 1 | 4 |
| item_1 | warehouse | 7_shipment_from | 2026-06-10 | 3 | 5 |
| item_1 | store_1 | 2_shipment_to | 2026-06-15 | 4 | 3 |
| item_1 | store_2 | 2_shipment_to | 2026-06-15 | 1 | 4 |
| item_1 | store_3 | 2_shipment_to | 2026-06-15 | 3 | 5 |
| level | from_location | to_location | item | ship_date | arrival_date | shipment_qty | demand_key |
|---|---|---|---|---|---|---|---|
| 1 | warehouse | store_2 | item_1 | 2026-05-25 | 2026-05-30 | 2 | 1 |
| 1 | warehouse | store_3 | item_1 | 2026-05-25 | 2026-05-30 | 2 | 2 |
| 1 | warehouse | store_1 | item_1 | 2026-06-05 | 2026-06-15 | 4 | 3 |
| 1 | warehouse | store_2 | item_1 | 2026-06-10 | 2026-06-15 | 1 | 4 |
| 1 | warehouse | store_3 | item_1 | 2026-06-10 | 2026-06-15 | 3 | 5 |
| 2 | supplier_1 | warehouse | item_1 | 2026-05-15 | 2026-05-25 | 2 | 2 |
| 2 | supplier_1 | warehouse | item_1 | 2026-05-26 | 2026-06-05 | 4 | 3 |
| 2 | supplier_1 | warehouse | item_1 | 2026-05-31 | 2026-06-10 | 1 | 4 |
| 2 | supplier_1 | warehouse | item_1 | 2026-05-31 | 2026-06-10 | 3 | 5 |
Loading Supply Chain Network from Files Required BOM files missing... will solve without BOMs Running obo Solver ***Starting to plan for demand key 0*** At store_1: Searching inventory for 1 of item_1 At store_1: Inventory meets all 1 need for item_1 ***Found 100.00% supply for demand key 0*** ***Starting to plan for demand key 1*** At store_2: Searching inventory for 2 of item_1 At store_2: No inventory for item_1 At store_2: Searching BodEdge item_1-warehouse to item_1-store_2 --At warehouse: Searching inventory for 2 of item_1 --At warehouse: Inventory meets all 2 need for item_1 At store_2: Found all supply. Done searching edges of item_1-store_2 ***Found 100.00% supply for demand key 1*** ***Starting to plan for demand key 2*** At store_3: Searching inventory for 2 of item_1 At store_3: No inventory for item_1 At store_3: Searching BodEdge item_1-warehouse to item_1-store_3 --At warehouse: Searching inventory for 2 of item_1 --At warehouse: No inventory for item_1 --At warehouse: Searching BodEdge item_1-supplier_1 to item_1-warehouse ----At supplier_1: Genesis Node for item_1. All 2 need satisfied --At warehouse: Found all supply. Done searching edges of item_1-warehouse At store_3: Found all supply. Done searching edges of item_1-store_3 ***Found 100.00% supply for demand key 2*** ***Starting to plan for demand key 3*** At store_1: Searching inventory for 4 of item_1 At store_1: No inventory for item_1 At store_1: Searching BodEdge item_1-warehouse to item_1-store_1 --At warehouse: Searching inventory for 4 of item_1 --At warehouse: No inventory for item_1 --At warehouse: Searching BodEdge item_1-supplier_1 to item_1-warehouse ----At supplier_1: Genesis Node for item_1. All 4 need satisfied --At warehouse: Found all supply. Done searching edges of item_1-warehouse At store_1: Found all supply. Done searching edges of item_1-store_1 ***Found 100.00% supply for demand key 3*** ***Starting to plan for demand key 4*** At store_2: Searching inventory for 1 of item_1 At store_2: No inventory for item_1 At store_2: Searching BodEdge item_1-warehouse to item_1-store_2 --At warehouse: Searching inventory for 1 of item_1 --At warehouse: No inventory for item_1 --At warehouse: Searching BodEdge item_1-supplier_1 to item_1-warehouse ----At supplier_1: Genesis Node for item_1. All 1 need satisfied --At warehouse: Found all supply. Done searching edges of item_1-warehouse At store_2: Found all supply. Done searching edges of item_1-store_2 ***Found 100.00% supply for demand key 4*** ***Starting to plan for demand key 5*** At store_3: Searching inventory for 3 of item_1 At store_3: No inventory for item_1 At store_3: Searching BodEdge item_1-warehouse to item_1-store_3 --At warehouse: Searching inventory for 3 of item_1 --At warehouse: No inventory for item_1 --At warehouse: Searching BodEdge item_1-supplier_1 to item_1-warehouse ----At supplier_1: Genesis Node for item_1. All 3 need satisfied --At warehouse: Found all supply. Done searching edges of item_1-warehouse At store_3: Found all supply. Done searching edges of item_1-store_3 ***Found 100.00% supply for demand key 5*** Solver complete. Writing output
Created by Bill Ulrich
See the About page for more details