Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 免费分配工作,匈牙利方法行吗?_Algorithm_Hungarian Algorithm - Fatal编程技术网

Algorithm 免费分配工作,匈牙利方法行吗?

Algorithm 免费分配工作,匈牙利方法行吗?,algorithm,hungarian-algorithm,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 最终结果(因为没有成本)是我能完成的任务的最大数量。在本例中,我最多可以完

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

例如:

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

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

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

匈牙利算法会给你一个答案,但不要使用无限成本,因为你无法比较
(无限+无限)
无限
(除非你自己比较成本)

矩阵形式:

  1   2   3

A 1   2   3

B 1   inf inf

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


取而代之的是,使用一些大到保证不会分配的成本(是的,小心溢出)。

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

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

不要对一些大数字执行此操作,这可能会导致溢出(除非您非常小心地实现匈牙利代码)

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

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


PSS:stackoverflow中的ID是解决此问题的方法。这是一种网络流方式。它被称为最短参数路径(sap)。请参阅:

匈牙利算法可以在这里使用,但类似的未加权最大二部匹配算法会更快。

由于没有成本,如何比较两种不同的分配?我正在考虑根据工作偏好指数添加“虚拟”成本,例如,工作5的工人A的成本为3(因为这是该员工列表中的第三项工作),这是个好主意吗?谢谢你的回答,我首先考虑了这个问题,但担心行和列最小化后结束矩阵将被0填充(成本无限的职位除外),但这可能不是问题?我对算法还是新手,正在努力学习。这不应该是问题——这意味着可能有不止一个同样好的解决方案。你忽略了偏好。也许你可以做管道,但你会有多高兴(开玩笑)?对不起,我应该说偏好并不重要,只要我能分配尽可能多的工作。@ZiyaoWei我不知道偏好到底是什么。哈哈,现在我必须学习最短参数路径方法,这是一个荣誉问题:p@sap这有点难,你可以先学习一些基本的算法,然后再学习t我很难理解网络流和sap。不幸的是,在一般情况下,不可能确定这样的成本。这是真的——我已经有一段时间没有看匈牙利语了,但是由于没有太清楚地定义首选项,所以很难修改它(我怀疑),除非像你和其他答案那样,忽略首选项。
  1   2   3

A 1   2   3

B 1   inf inf

C 1   inf inf