工作分配算法

Posted

技术标签:

【中文标题】工作分配算法【英文标题】:Work Assignment Algorithm 【发布时间】:2012-02-16 20:39:25 【问题描述】:

我们有一个工人列表和一个分配给这些工人的任务列表。每个任务都属于特定类别(大约 50 个类别,大约 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) Workers-Categories-Max number of tasks

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).

我试过循环遍历worker,得到关联的任务,一个一个地做任务,但是有一个漏洞,对于一些worker很少的类别,任务分配不公平,有些worker一直处于空闲状态而有些类别还有任务,可以通过将任务随机分配给其他工作人员来更有效地分配。

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

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

【问题讨论】:

听起来像是功课。自己尝试一下,如果遇到特定问题,请询问。没有人会为你写作业。 同意,这听起来像家庭作业:),但想法是使用已经尝试和测试的解决方案来解决相同或类似的问题,或者只是指向我可以探索的资源的指针(如建议火焰) 【参考方案1】:

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

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

【讨论】:

以上是关于工作分配算法的主要内容,如果未能解决你的问题,请参考以下文章

算法第5章上机实践报告

工作分配问题回溯法

1776工作分配问题(搜索+剪枝)

算法第5章上机实践

算法第5章上机实践

算法第五章上机实践