没有成本的工作分配,匈牙利方法会起作用吗?

时间:2013-05-09 14:11:16

标签: algorithm hungarian-algorithm

所以我的工作分配问题没有匈牙利方法所需的传统成本。

例如:

I have 3 workers - A, B and C
I have 5 jobs -  1, 2, 3, 4 and 5

每个工人都有他可以执行的工作清单,如下所示:

worker A can work on job 1, 2, 5
worker B can work on job 1, 2
worker C can work on job 1

最终结果(因为没有成本)是我可以实现的最大分配数。在这个例子中,我最多可以完成3个任务:

worker A on job 5
worker B on job 2
worker C on job 1

匈牙利方法是解决这个问题的好方法吗?我应该只使用“虚拟”费用吗?我想也许可以使用工作偏好的指数作为成本;这是一个好主意吗?

4 个答案:

答案 0 :(得分:6)

匈牙利算法可以在这里工作,但未加权最大二分匹配(如Hopcroft–Karp的算法会更快。

答案 1 :(得分:5)

将费用-1分配给他们可以的工作,其他工作为零。

然后运行匈牙利语算法,它会给你答案(事实上它将返回-answer)。

不要用一些大数字来做,这可能会导致溢出(除非你非常谨慎地实施匈牙利语。)

实际上,它是二分图中的最大匹配,并且有很多方法可以解决这个问题,请参阅维基页面:

  

http://en.wikipedia.org/wiki/Matching_(graph_theory)#Maximum_matchings_in_bipartite_graphs

PS:Hopcroft-Karp算法比匈牙利语更快,也更简单。值得一试。一些编译方法比这两种方法更快,但不建议首先学习这些算法。

PSS:您在stackoverflow中的ID是一种解决此问题的方法。这是一种网络流量方式。它被称为最短参数路径(sap)。见:http://coral.ie.lehigh.edu/~ted/files/ie411/lectures/Lecture11.pdf

答案 2 :(得分:2)

虚拟成本应该可以解决问题。为他们可以完成的任何工作分配成本1,并将无限成本(如果您的系统允许)分配给他们无法完成的工作。匈牙利算法旨在最大限度地降低所有任务的总成本,因此它可以自然地解决问题。不应该考虑你认为他们的工作偏好是什么;这是算法的工作。

答案 3 :(得分:1)

匈牙利语算法将为您提供答案,但不要使用无穷大费用,因为您无法比较(infinity + infinity)infinity(除非您自己比较费用)。

A: 1, 2, 3

B: 1

C: 1

矩阵形式:

  1   2   3

A 1   2   3

B 1   inf inf

C 1   inf inf

您的计算机如何比较1, inf, inf2, 1, inf

相反,使用一些如此大的成本以保证不会被分配(是的,小心溢出)。