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]