Supply Chain Management & Logistics
Managing the flow of goods from raw material to customer. Learn supply-chain structure and drivers, the bullwhip effect and its causes, information sharing and VMI, risk pooling and network design, facility location (centre of gravity, load–distance), transportation modes and costs, warehousing and order picking, sourcing and supplier selection, logistics KPIs, resilience and sustainability — with Python simulating the bullwhip effect in a 4-stage chain.
A supply chain links suppliers, manufacturers, distributors, retailers and customers. Decisions at each stage affect the others: a retailer's ordering policy can make the factory's demand wildly unstable; a new warehouse location changes transport cost and delivery speed for everyone.
Supply-chain engineering balances cost, speed, reliability, flexibility and — increasingly — resilience and sustainability, using forecasting, inventory models, network optimisation and data sharing.
An analogy
The bullwhip effect is like the children's game of 'telephone' combined with over-reaction: each stage passes on a slightly exaggerated version of the demand signal it received, so a small ripple at the customer becomes a huge wave at the factory.
Supply-chain structure and drivers
Flows: materials (downstream), information and cash (both ways). Drivers: facilities (where), inventory (how much), transportation (how), information (what's shared), sourcing (who), pricing (demand shaping). Strategy fit: efficient chains for stable functional products; responsive chains for innovative products with uncertain demand.
The bullwhip effect
Causes and remedies:
- Demand-signal processing (forecasting from orders) → share POS data, collaborative forecasting (CPFR)
- Order batching → smaller, more frequent orders; lower ordering costs
- Price fluctuations and promotions → everyday low pricing
- Rationing and shortage gaming → allocate by past sales
- Long lead times → shorten lead times, vendor-managed inventory (VMI)
Network design and logistics
Fewer warehouses pool risk (less safety stock, √n law) but raise outbound transport distance and delivery time; more warehouses do the opposite. Location models range from centre of gravity to mixed-integer network optimisation. Transport modes trade cost against speed: sea < rail < road < air. Warehouses use slotting, zone/batch/wave picking and increasingly automation (AS/RS, AMRs).
Sourcing, risk and sustainability
Supplier selection with weighted scoring and total cost of ownership; single vs multiple sourcing; nearshoring. Resilience: map tier-n suppliers, hold strategic buffers, dual-source critical parts, stress-test with scenarios (pandemics, canal blockages, chip shortages). Sustainability: scope-3 emissions, circular supply chains (reverse logistics, remanufacturing). Digital supply chains use control towers, IoT tracking and optimisation.
Formulas
- Bullwhip (order-up-to, MA forecast, p periods):
Var(q)/Var(D) ≥ 1 + 2L/p + 2L²/p² - Risk pooling:
σ_pooled = √n·σ (vs n·σ separate) → safety stock falls by √n - Centre of gravity:
x* = Σwᵢxᵢ / Σwᵢ; y* = Σwᵢyᵢ / Σwᵢ - Cash-to-cash:
C2C = DIO + DSO − DPO - Transport cost:
≈ rate × weight × distance (per mode)
Worked example: Risk pooling
Given: 4 regional warehouses, each σ = 100 units/week (independent), z = 1.65
Find: Safety stock separate vs pooled.
- Separate: 4 × 165 = 660
- Pooled: 1.65 × 100 × √4 = 330
Answer: Pooling halves safety stock
Worked example: Centre of gravity
Given: Demand points (0,0) w 100, (10,0) w 300, (0,10) w 100
Find: Location.
- x* = 3000/500 = 6
- y* = 1000/500 = 2
Answer: (6, 2) — pulled toward the big customer
Worked example: Cash-to-cash
Given: DIO 45, DSO 30, DPO 40 days
Find: C2C.
- 45 + 30 − 40
Answer: 35 days of working capital tied up
Simulating the bullwhip effect
import random, statistics
random.seed(7)
# Bullwhip effect in a 4-stage chain with order-up-to policies and moving-average forecasts
weeks = 200
customer = [100 + random.gauss(0, 10) for _ in range(weeks)]
def stage(demand, L=2, n=4):
orders, hist = [], []
inv_pos = demand[0] * (L + 1)
for d in demand:
hist.append(d)
f = statistics.mean(hist[-n:])
target = f * (L + 1)
order = max(0.0, d + (target - inv_pos))
inv_pos += order - d
orders.append(order)
return orders
flows = [customer]
for name in ("retailer", "wholesaler", "distributor", "factory"):
flows.append(stage(flows[-1]))
base = statistics.pvariance(customer)
for name, f in zip(("customer", "retailer", "wholesaler", "distributor", "factory"), flows):
print(f"{name:11s} order variance ratio {statistics.pvariance(f[20:])/base:6.1f}")
# customer order variance ratio 1.0
# retailer order variance ratio 3.7
# wholesaler order variance ratio 17.2
# distributor order variance ratio 71.5
# factory order variance ratio 175.5Each stage forecasts from its incoming orders and adjusts its order-up-to level, amplifying variability roughly 4× per stage: the factory sees 175× the customer's demand variance even though customers are steady. Sharing point-of-sale data, shorter lead times, smoother forecasts and stable pricing tame the bullwhip.
Common mistakes
- Wrong: Forecasting from orders received instead of end demand. — Right: Share POS/consumption data upstream.
- Wrong: Optimising transport cost alone. — Right: Consider inventory, service and total landed cost.
- Wrong: Single-sourcing critical parts without risk analysis. — Right: Map risk; dual-source or buffer.
Applications
- E-commerce: Fulfilment networks and same-day delivery.
- Automotive: JIT/JIS supply and tier-n risk management.
- Pharma: Cold chain and serialisation.
- Humanitarian logistics: Pre-positioning relief supplies.
Key takeaways
- Materials, information and cash must all flow.
- Bullwhip amplifies variance — share data, cut lead times.
- Pooling cuts safety stock by √n; trade against transport.
- Design for cost, service, resilience and sustainability.
Going further
- Network optimisation MILP: Facility location with capacities and service constraints.
- Beer game: Classic experiential simulation of bullwhip.
- Supply-chain digital twins: End-to-end simulation for resilience planning.