0

I am working on trying to solve the following problem:

A warehouse has a pool of several hundred orders that need to be fulfilled. The first step to fulfilling an order is to pick its products which are shelved throughout the warehouse. Workers pick orders in batches of 16, grouping the picks for all 16 orders into one job.

For a given order, there is a finite set of locations the operator must go to in order to pick the products needed for the order. These locations will often overlap with the locations needed for other orders. So it is ideal to create batches with many overlapping locations to reduce the number of locations workers go to. How do you select a set of 16 orders for a batch so as to minimize the total number of locations the worker must go to?

The seems like a variation of the traveling salesman problem. For a pool of 100 shipments, for example, the brute force approach would be to try all (100 choose 16) = 1.3E18 combinations of 16 orders, and choose the set with the fewest locations. Is this a TSP problem or is there another approach? If it is, how do make the problem more tractable?


Here is a simplified example of the problem. There is a pool of 8 orders: a..h. Across all of the orders, products are shelved in 7 different locations: 1..7.

Order Locations:

a => [1]
b => [2,3,4]
c => [2,3,4]
d => [5]
e => [6]
f => [2,3,4]
g => [2,3,4]
h => [7]

To pick a batch of 4 orders from this pool of 8, the ideal is [b,c,f,g] which will route to locations [2,3,4]

  • Is this an online problem or a real one? How many possible locations can there be at most for an order? – juvian Aug 29 '18 at 16:26
  • 1
    This does not share much structure with a tsp problem. What is your exact cost? Optimizing your first pick might penalize the global objective as later tours might get really bad. This is probably more related to set cover and co. (Somewhere in this group of problems, maybe; cant crawl wiki right now) – sascha Aug 29 '18 at 16:38
  • @juvian This is a real problem. A given order will typically have a handful of locations. Rarely we will see orders with a few dozen locations. – Brian Abreu Aug 29 '18 at 17:00
  • @sascha Good question. The ideal solution would be to minimize the total time a given batch would require of a worker. However, because of physical layout of the warehouse and constraints with where carts can and can't be rolled, it is very difficult to quantify the time it would take to cover a set of locations. So, the goal here is to simply reduce the number of locations as a heuristic. – Brian Abreu Aug 29 '18 at 17:07
  • The real question is: a single batch or the sum over all batches covering all orders. What do you gain by visiting only one loc at batch one when because of this all following batches, still needed to cover the orders,are scattered all over the place. All these interpretations could be tackled by constraint programmin, integer programming and sat solvin; ordered by the amount of expected impl/modelling work. But those approaches will need a formal/math model. – sascha Aug 29 '18 at 17:13

1 Answers1

0

It's not quite traveling salesman, since you may revisit sites more than once, and it may not be necessary to return to start (I don't know). Rather than getting too much into TS theory here, consider the best means of locating your sites (unless they're fixed). You might want to place favorite sites closer to you, and the rarer ones farther away.

After that, consider the cost of extra distance traveled vs. computation cost. Separating into multiple trips certainly reduces computation, but may add some distance (in your example, we still have to visit 1, 5, 6, 7). There are many approximate solutions that run very quickly and yield solutions very close to optimal. Christofides' algorithm was the first real good one. See the Wikipedia article "Travelling Salesman Problem" for that and others. I studied this problem, but it was 1981 or 1982 in college, so I'm sure it's been improved since.

Good luck!

Doug Ice
  • 1
  • 1
  • 1
  • Thanks Doug. Improving the locations of products to group faster-moving products in nearby locations is definitely a good approach to reducing the total distance required to pick batches. To be clear on the process, pickers will not visit the same location multiple times in a given batch. They will instead pick the total number needed for _all_ orders in the batch at each location. – Brian Abreu Aug 29 '18 at 17:11
  • Can we turn this around and go get all items for all orders in all batches from various locations, take them back, and stage them into orders and/or batches there? You may need to visit a few popular locations more than once, but you wouldn't have to revisit locations on a per-batch basis. This presumes the staging area is sufficiently large. – Doug Ice Aug 30 '18 at 18:13