Algorithm Challenge!
December 16, 2007 6:35 PM
Subscribe
Algorithmfilter: I have a set of tasks and a set of workers. Tasks vary in size. Each task can be done by only some of the workers. How can I find a mapping from tasks to workers that minimizes the load on the the heaviest-loaded worker, and assigns all the work?
Here's an example in case it's not totally clear:
Tasks:
Task A: 2 hours
Task B: 5 hours
Task C: 3 hours
Task D: 2 hours
Task E: 7 hours
Task F: 7 hours
Task G: 4 hours
Worker 1 is able to do A, B, C
Worker 2 is able to do B, C, D
Worker 3 is able to do C, D, E
Worker 4 is able to do D, E, F
Worker 5 is able to do E, F, G
Worker 6 is able to do F, G, A
Worker 7 is able to do G, A, B
Here's one mapping that this not optimal (because there are other obvious mappings that have the heaviest-loaded worker doing less than worker 2's 10 hours of work):
1 -> (A)
2 -> (B, C, D)
3 -> (E)
4 -> (F)
5 -> (G)
6 -> ()
7 -> ()
Can the optimal mapping be computed in polynomial time? How about an approximation?
I feel like this must be analagous to a combinatorial optimization problem; it's similar to multi-commodity max flow, or the assignment problem, but neither is a good fit as far as I can tell. I'm pretty sure the objective function is non-linear, which is probably what's killing me. I'm thinking that simulated annealing may be the way to go (randomly swapping assignments on each iteration), but I'd rather not resort to that.
posted by jewzilla to computers & internet (9 comments total)
5 users marked this as a favorite
It does seem like the kind of optimization / resource allocation / operations-research problem that was studied extensively in the 50s and 60s but doesn't show up in textbooks much any more. Have you checked Knuth?
posted by hattifattener at 7:03 PM on December 16, 2007