工作分配算法

时间:2012-01-23 13:46:29

标签: algorithm

我们有一份工人清单和一份分配给这些工人的任务清单。每个任务都属于特定类别(大约10000个类别,大约10000个任务)。每个工作人员可以处理一组类别(每个工人大约5个类别)。此外,每个工人都有最多可分配给他的任务。

我们需要将任务分配给工人,以便

a)可分配的最大任务数量
b)没有工人被分配任务,这是在工人类别集之外的任务 c)如果可以分配给他的任务,则没有工人闲置 d)分配给任何工人的任务数量应小于其最大分配

示例数据:

a)任务类别关系

T1 - C1
T2 - C1
T3 - C1
T4 - C2
T5 - C1
T6 - C3
..... (around 10k tasks, 50 categories)

b)工人 - 类别 - 最大任务数

W1 (100) - C1 
W1 (100) - C2 
W2 (20) - C1
W2 (20) - C3
..... (around 50 workers, each can work on around 5 categories). 
      Where 100 for W1 means W1 can be assigned maximum 100 tasks 
      (across all categories, it is mapped with).

我试过循环工人并完成他们相关的任务并逐一完成他们的任务,但它有一个漏洞,对于一些工人很少的类别,任务不公平,一些工人闲置有些类别还有剩下的任务,可以通过将任务改组给其他工作人员来更有效地分配任务。

例如,如果C1有2000个任务,三个工人W1,W2,W3各有1000个最大任务。和C2有1000个任务,仅与W1相关联。 如果我们将C1任务分配给W1和W2到它们的全部容量(每个1000个任务),我们就不能分配C2的任务,因为相关的工作人员W1已经完全被C1占用。如果我们将C1任务分配给W2和W3,我们可以分配所有任务。

我需要一些能够有效而公平地完成任务的算法。如果有人已经解决或知道我可以使用/探索的可能的解决方案/资源,请建议。

1 个答案:

答案 0 :(得分:2)

http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=maxFlow2

“最大二分匹配”的示例是经典的“为工作者分配工作”任务。您只需要将每个工作者仅链接到其类别中的任务。图论是你的朋友。