pmah
pmah

Reputation: 167

Pickup and Delivery Problem Algorithm Help

Let's assume food delivery for multiple restaurants (say 20). There are (say 10) drivers available. Further, let's say we get 100 orders over a 4 hour period to deliver food from these restaurants to homes.

So drivers have to be coordinated to pickup food at a location and deliver to customers at home.

Primary goal is to minimize time to delivery, i.e. time between order and arrival at homes. The secondary goal is to maximize driver capacity (i.e., least amount of time to deliver all orders).

Bear in mind that the orders come in over a four hour period, so let's say evenly, i.e. one very 3 minutes. Also, let's assume the orders are randomly to the 20 restaurants.

Assume that I can calculate time to travel from any location to a destination to the second.

I know the location of all drivers in realtime. I also know their statuses, i.e. are they currently on their way to pick up an order (to take to a known destination), have they already picked up an order and are enroute to a known destination.

Constraints are: 1) Must pick up an order after a given time (i.e. meal preparation time for restaurant) 2) Must deliver order in under 45 mins (otherwise alert thrown) 3) Must pad time with "x" minutes to accommodate for time spent walking to store to pickup order, etc. 4) Must pad time with "y" minutes to accommodate for time spent delivering order to customer and collecting payment. 5) Drivers have only a given set of payment methods (e.g. Cash, Visa, Amex, MasterCard). We must match customer request (cash, visa, etc) with driver capability (cash, visa, amex, etc).

So for example, if I get two orders with close by destination and close by pickup locations, even if there is another "Free" driver (not doing anything), it would be more efficient to use the same driver to pickup both orders and deliver both orders.

You can assume there will be delivery zones enforced for each restaurant, meaning, most people ordering from them will most likely be close to them. Therefore, this algorithm should manage to segment drivers automatically into city zones, and favor drivers within the zone already.

Upvotes: 4

Views: 4104

Answers (2)

Geoffrey De Smet
Geoffrey De Smet

Reputation: 27312

It depends on how much development time you got for the algorithm itself (not including GUI, alerts and all that).

  • If you're talking about 1 or 2 days, go for a deterministic algorithm: put the orders in a FIFO stack, then iteratively take the next order and assign it to the first-available driver. This is pretty much how humans do it. It's also not really efficient (especially with 3 or more restaurants).
  • If you have more time (because you're talking this problem for a big company), then the fun starts. Look into meta-heuristics (tabu search, genetic algorithms, simulated annealing). Take a look at existing libraries to do much of the work for you. For example, if you're working in Java, take a look at Drools Planner.

BTW: if you're thinking about brute forcing it. Don't bother: it won't scale.

Upvotes: 1

Robin Green
Robin Green

Reputation: 33033

This sounds like an online version of the Vehicle Routing Problem with Time Windows. I suggest you Google that and read the papers that come up.

Upvotes: 1

Related Questions