Optimize E-Commerce Last-Mile Delivery with Python

Organize your routes to deliver parcels with a minimum number of drivers using optimization models with python

Question?
Optimize E-Commerce Last-Mile Delivery with Python
Photo by Sam Balye / Unsplash

If you travel to first and second-tier cities of China, you will find on the street many delivery drivers (Chinese: 快递).

They take the parcels from small warehouses called customer service centres (Chinese:客户服务中心) located in each neighbourhood and deliver them to the final customers.

These centres are key elements of the Logistics Network of the major courier companies in China.

They increase geographic coverage for last-mile delivery while delivering the best service level and lead time in the market.

Before arriving at your door, your parcel will be picked up from the vendor’s warehouse, transit through several regional distribution centres and will finally arrive at the service centre of your neighbourhood.

When your parcel arrives at the centre, you will receive a notification on your phone that a courier will deliver your parcel during the day.

This article presents a solution to optimise last-mile delivery from these centres, reducing costs and ensuring a uniform workload for each driver.

💌 New articles straight to your inbox for free: Newsletter

Scenario


Problem Statement

You are a manager in a local service centre with

  • 4 drivers in your team
  • 15 parcel capacity per vehicle
  • 16 destinations to cover in the neighbourhood named Dj with j in [1, 16]
  • D0 is the centre
  • 1 route per driver
Example with 0: your service centre | 1 … 16: customers’ destinations — (Image by Author)

Distance Matrix

To build your model, you need to provide a distance matrix M as input, defined by

  • M(i, j) with i, j in [0, 16]
  • M(i, j) = distance between Di and Dj

This distance matrix will be loaded from an Excel file.

Demand: number of parcels to deliver to each location

We will use a Python list here with the first value at zero (because you don’t deliver anything in the centre)

  • Demand = [0, 1, 1, 2, 4, 2, 4, 8, 8, 1, 2, 1, 2, 4, 4, 8, 8]

Objective

  • Deliver all parcels with a minimum number of drivers
  • Optimise the routing to minimise the distance covered per route
ResultsRoute for Driver 0
0 Parcels(0) -> 4 Parcels(4) -> 3 Parcels(6) -> 1 Parcels(7) ->
7 Parcels(15) -> 0 Parcels(15)
Distance of the route: 1552 (m)
Parcels Delivered: 15 (parcels)
Route for Driver 1
0 Parcels(0) -> 14 Parcels(4) -> 16 Parcels(12) -> 10 Parcels(14) -> 9 Parcels(15) -> 0 Parcels(15)
Distance of the route: 1552 (m)
Parcels Delivered: 15 (parcels)
Route for Driver 2
0 Parcels(0) -> 12 Parcels(2) -> 11 Parcels(3) -> 15 Parcels(11) -> 13 Parcels(15) -> 0 Parcels(15)
Distance of the route: 1552 (m)
Parcels Delivered: 15 (parcels)
Route for Driver 3
0 Parcels(0) -> 8 Parcels(8) -> 2 Parcels(9) -> 6 Parcels(13) -> 5 Parcels(15) -> 0 Parcels(15)
Distance of the route: 1552 (m)
Parcels Delivered: 15 (parcels)
Total distance of all routes: 6,208 (m)
Parcels Delivered: 60/60

Based on these results, you can assign each of your four drivers a route that has the same total distance

  • 100% of parcels are delivered with a minimum distance covered
  • Drivers’ vehicles are loaded to their maximum capacity (15/15)

Using this model helps ensure that your drivers, who are paid a fixed amount per delivery, are fairly assigned to routes.

You will avoid driver complaints about longer routes than their colleagues.

Moreover, you are using your resources at their maximum capacity.

Build your Model

Capacitated vehicle routing problem (CVRP) with Google OR-Tools

OR-Tools is an open-source collection of tools from Google for combinatorial optimisation.

The objective is to find the best solution out of a very large set of possible solutions.

Let us use this library to find the optimal routes.

Import Distance Matrix and Init parameters

Create functions to calculate distances and order quantities

Build your model with constraints

Show the solution

Conclusion

💡
If you have any question, feel free to ask it here: Ask a Question

This model can help the centre manager to

  • Optimise his fleet with full utilisation of his drivers and vehicles
  • Ensure that the workload is equally distributed among all drivers

This is an example where optimisation tools can support transportation operations.

In another case study, we use Graph Theory to optimise truck routing for store deliveries.

Graph representing three monts of deliveries

This visual representation of the routing can help you to spot levers of optimisation while understanding loss of performance.

If you want to add this skill to your toolbox of transportation analysts, have a look at this video

Any question?

Feel free to share your version and commit to the GitHub repository.

🔗
You can find the full code in this Github repository: Link

About Me

Let’s connect on LinkedIn and Twitter. I am a Supply Chain Engineer who is using data analytics to improve logistics operations and reduce costs.

If you’re looking for tailored consulting solutions to optimise your supply chain and meet sustainability goals, feel free to contact me.

Question?
Question?