Data Department worked on fleet sizing and route assignment for a parcel delivery company. We combined custom clustering with mixed-integer programming to respect delivery windows, priorities and vehicle capacity. The analysis showed that the same service level could be met with about 30% fewer vehicles.
The decision
A parcel delivery company makes two linked decisions. The first is strategic: how many vehicles does the operation need? The second is operational: which vehicle serves which deliveries, in what order?
Both decisions are usually made with rules of thumb and experience. That works, but it tends to build in slack. Extra vehicles absorb the cost of routes that were never optimised. Every extra vehicle carries fixed costs: lease or depreciation, driver, insurance, maintenance.
The question we worked on was: what is the smallest fleet that still meets the service level the company has promised its customers?
What we built
We built an optimisation model in two layers.
| Layer | Method | What it does |
|---|---|---|
| Grouping | Custom clustering | Groups deliveries into sensible areas so the optimisation problem stays solvable |
| Assignment | MIP (mixed-integer programming) | Assigns deliveries to vehicles and sizes the fleet, subject to the constraints below |
The constraints the model had to respect:
- Delivery windows: each delivery must arrive within its promised time window.
- Priorities: some deliveries matter more than others and must be served first.
- Capacity: each vehicle can carry only so much.
Mixed-integer programming is a mathematical optimisation method for decisions that are yes-or-no or whole numbers, such as "does this vehicle serve this stop?" or "how many vehicles do we need?". It finds the best answer that satisfies every constraint, rather than an answer that only looks good on average.
Clustering came first for a practical reason. A full routing problem over every parcel at once grows very large very quickly. Breaking it into well-chosen groups keeps solve times workable without throwing away the structure of the problem. The clustering was built for this operation rather than taken off the shelf.
Results
- About 30% fewer vehicles: the analysis showed that the same service level could be met with about 30% fewer vehicles.
- The model respected delivery windows, priorities and capacity in its plans.
Lessons
Optimisation, not prediction, was the right tool. This problem did not need a forecast. It needed the best decision under hard constraints. Not every AI (artificial intelligence) project is a machine learning project; operations research methods such as mixed-integer programming are often the better fit for planning problems.
Define the service level first. A smaller fleet is easy if you are allowed to deliver late. Fixing the service level as a constraint made the ~30% figure meaningful: same promise to customers, fewer vehicles.
Decomposition makes large problems practical. Clustering before optimisation is a deliberate trade-off between theoretical optimality and solve time. For a daily operational tool, a very good plan available in minutes beats a perfect plan that arrives too late.
Plans meet reality on the road. The ~30% figure comes from the model's plans. Real routes meet traffic, failed deliveries and driver knowledge. That is why, in general, we recommend confirming any planning result with a controlled trial on part of the operation before changing the whole fleet.
We apply the same methods in our optimisation and simulation work, and they are often a strong first project for distribution and logistics companies.
Frequently asked questions
What is mixed-integer programming?
Mixed-integer programming is a mathematical optimisation method for decisions that involve yes-or-no choices or whole numbers, such as how many vehicles to run. It finds the best solution that satisfies all stated constraints.
Does a smaller fleet mean worse service?
Not in this model. The service level was a constraint: delivery windows, priorities and capacity had to be respected. The analysis showed the ~30% reduction with the same service level held fixed.
Why cluster deliveries before optimising?
A routing problem over every parcel at once grows very large very quickly. Grouping deliveries into well-chosen areas first keeps solve times workable while preserving the structure of the problem.