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 and more complex. In this example, a warehouse needs to satisfy demand from three dependent stores. Warehouses exists to break bulk... they allow a company to place larger orders to suppliers at a discounted price. Still, in order for the warehouse to be effective, and benefit the company with cost savings, it needs to be efficient at ordering the right quantity at the right time.
This is where a solver comes into play. The solver calculates the total flow needed, netted for inventory, to meet customer demand at the three stores. The solver output tells the warehouse exactly when it needs to ship, receive, and order.
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 shipments between supplier_1 and the warehouse since now a planner can quickly tie an upstream shipment in the network directly to the dependent demand at the store.
How does this solver output benefit a company? The solver ensures the warehouse is ordering just enough supply at exactly the right time. The inventory quantities 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 their 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 aggregate purchase orders. Aggregating 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