Python linear programming model (PuLP + scipy) evaluating warehouse locations, lane allocations, and transport mode assignments to minimise total distribution cost while satisfying service level constraints across a 12 node European network.
The distribution network was designed 8 years ago for a different customer mix. Four warehouse locations were chosen based on real estate availability, not demand centroids. Demand has shifted significantly since, resulting in 23% of lanes operating well above optimal cost per km and 14% of SLA commitments at risk due to distance misalignment.
A Python model formulates the network as a minimum cost flow problem: minimise Σ(cost per lane × volume) subject to supply balance at each warehouse, demand satisfaction at each customer node, capacity constraints, and maximum service lead time per SLA band. Candidate warehouse locations evaluated via p median heuristic.
The optimised network consolidates from 4 to 3 active DCs, shifts 8 road lanes to rail, and eliminates 6 suboptimal cross docking points. Total annual distribution cost drops from €7.8M to €6.4M an 18% saving. SLA compliance improves from 81% to 97%. Full implementation over 9 months.
| LANE ID | ORIGIN | DESTINATION | MODE | DIST (KM) | VOLUME (UNITS) | TRANSPORT (€) | HANDLING (€) | TOTAL COST (€) | OPT SAVING (€) | SLA DAYS | ACTUAL DAYS | SLA MET | STATUS |
|---|