Example: Partial BOM

Simple constrained inventory example showing solver handle limited available supply

About Example

This example is very similar to the One BOM example, except for the slight vairation that the flour supplier doesn't have infinite inventory. This causes the solver to have to handle the constraint of limited supply. In order to avoid over ordering water and yeast, the solver replans the bagel BOM node for only the percentage of available supply it can get of all inputs: 50%.

Does making 50% of a bagel really make sense? Probably not, but this is just an example!

Video Notes

Data Notes


bom_ids

bom_id location lead_time_days
1 factory_1 5
2 factory_1 10

bom_inputs

bom_id input_item input_qty
1 water 1.0
1 flour 2.0
1 yeast 0.5

bom_outputs

bom_id output_item output_qty
1 bagel 1

demand

location item need_date demand_qty note
store_1 bagel 5/30/2024 1.0 NaN
factory_1 water 6/30/2024 0.5 use this to check .5 inventory at factory exists for use
factory_1 water 6/30/2024 1.0 this should not have inventory at factory 1

item_location

item location genesis onhand_qty image
water supplier_1 True NaN water.png
flour supplier_1 False NaN flour.png
yeast supplier_2 True NaN yeast.png
water factory_1 False 1.0 water.png
flour factory_1 False 1.0 flour.png
yeast factory_1 False 1.0 yeast.png
bagel factory_1 False NaN bagel.png
bagel store_1 False NaN bagel.png

lanes

item from_location to_location lead_time_days
bagel factory_1 store_1 5
water supplier_1 factory_1 8
flour supplier_1 factory_1 8
yeast supplier_2 factory_1 8

item_location_peggings

item location activity activity_date pegged_qty demand_key
water factory_1 5_BOH_usage 2024-05-20 0.50 0
flour factory_1 5_BOH_usage 2024-05-20 1.00 0
yeast factory_1 5_BOH_usage 2024-05-20 0.25 0
water factory_1 6_BOM_input 2024-05-20 0.50 0
flour factory_1 6_BOM_input 2024-05-20 1.00 0
yeast factory_1 6_BOM_input 2024-05-20 0.25 0
bagel factory_1 3_BOM_output 2024-05-25 0.50 0
bagel factory_1 7_shipment_from 2024-05-25 0.50 0
bagel store_1 2_shipment_to 2024-05-30 0.50 0
water supplier_1 0_item_genesis 2024-06-22 1.00 2
water supplier_1 7_shipment_from 2024-06-22 1.00 2
water factory_1 2_shipment_to 2024-06-30 1.00 2
water factory_1 5_BOH_usage 2024-06-30 0.50 1

shipments

level from_location to_location item ship_date arrival_date shipment_qty demand_key
1 factory_1 store_1 bagel 2024-05-25 2024-05-30 0.5 0
1 supplier_1 factory_1 water 2024-06-22 2024-06-30 1.0 2

Loading Supply Chain Network from Files
Running obo Solver
***Starting to plan for demand key 0***
At store_1 on 2024-05-30: Searching inventory for 1.0 units of bagel
At store_1: No inventory for bagel
At store_1: Searching BodEdge bagel-factory_1 to bagel-store_1 with LT 5.0 days
--At factory_1 on 2024-05-25: Searching inventory for 1.0 units of bagel
--At factory_1: No inventory for bagel
--At factory_1: Searching BomOutputEdge BOM-1 to bagel-factory_1 with LT 5.0 days
----At BOM 1 input 1/3: Searching for 1.0 of water
------At factory_1 on 2024-05-20: Searching inventory for 1.0 units of water
------At factory_1: Inventory meets all 1.0 need for water
----At BOM 1 input 1/3: Found all supply for water
----At BOM 1 input 2/3: Searching for 2.0 of flour
------At factory_1 on 2024-05-20: Searching inventory for 2.0 units of flour
------At factory_1: Found 1.0/2.0 inventory for flour
------At factory_1: Searching BodEdge flour-supplier_1 to flour-factory_1 with LT 8.0 days
--------At supplier_1 on 2024-05-12: Searching inventory for 1.0 units of flour
--------At supplier_1: No inventory for flour
--------At supplier_1: No parent edges to search. Returning found supply 0
------At factory_1: No supply found upstream of flour-supplier_1 to flour-factory_1
----At BOM 1 input 2/3: Found only 50.00% of need for flour. Adjusting found ratio
----At BOM 1 input 3/3: Searching for 0.25 of yeast
------At factory_1 on 2024-05-20: Searching inventory for 0.25 units of yeast
------At factory_1: Inventory meets all 0.25 need for yeast
----At BOM 1 input 3/3: Found only 50.00% of need for yeast. Adjusting found ratio
----At BOM 1: Done searching all inputs
----At BOM 1: Replanning BOM for just 0.5 qty
----At BOM 1 input 1/3: Searching for 0.5 of water
------At factory_1 on 2024-05-20: Searching inventory for 0.5 units of water
------At factory_1: Inventory meets all 0.5 need for water
----At BOM 1 input 1/3: Found all supply for water
----At BOM 1 input 2/3: Searching for 1.0 of flour
------At factory_1 on 2024-05-20: Searching inventory for 1.0 units of flour
------At factory_1: Inventory meets all 1.0 need for flour
----At BOM 1 input 2/3: Found all supply for flour
----At BOM 1 input 3/3: Searching for 0.25 of yeast
------At factory_1 on 2024-05-20: Searching inventory for 0.25 units of yeast
------At factory_1: Inventory meets all 0.25 need for yeast
----At BOM 1 input 3/3: Found all supply for yeast
----At BOM 1: Done searching all inputs
--At factory_1: Found 0.5/1.0 on edge BOM-1 to bagel-factory_1
At store_1: Found 0.5/1.0 on edge bagel-factory_1 to bagel-store_1
***Found 50.00% supply for demand key 0***
***Starting to plan for demand key 1***
At factory_1 on 2024-06-30: Searching inventory for 0.5 units of water
At factory_1: Inventory meets all 0.5 need for water
***Found 100.00% supply for demand key 1***
***Starting to plan for demand key 2***
At factory_1 on 2024-06-30: Searching inventory for 1.0 units of water
At factory_1: No inventory for water
At factory_1: Searching BodEdge water-supplier_1 to water-factory_1 with LT 8.0 days
--At supplier_1 on 2024-06-22: Genesis Node for water. All 1.0 need satisfied
At factory_1: Found 1.0/1.0 on edge water-supplier_1 to water-factory_1
At factory_1: Found all supply. Done searching edges of water-factory_1
***Found 100.00% supply for demand key 2***
Solver complete. Writing output

Created by Bill Ulrich
See the About page for more details