7

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

例如:

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

4 回答 4

6

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

于 2013-05-09T14:35:02.333 回答
5

将成本-1分配给他们可以做的工作,其他为零。

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

不要用一些大的数字来做,它可能会导致溢出(除非你非常仔细地实现匈牙利语)。

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

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

于 2013-05-09T14:22:22.987 回答
2

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

于 2013-05-09T14:17:15.107 回答
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, inf和进行比较2, 1, inf

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

于 2013-05-09T14:21:16.417 回答