【问题标题】:Job assignment with NO cost, would Hungarian method work?没有成本的工作分配,匈牙利方法行得通吗?
【发布时间】:2013-05-09 14:11:15
【问题描述】:

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

例如:

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

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

【问题讨论】:

  • 既然没有成本,如何比较两个不同的作业?
  • 我正在考虑根据工作偏好指数添加“虚拟”成本,例如,工作 5 的工人 A 的成本为 3(因为它是该工人列表中的第三个工作),这是好主意?

标签: algorithm hungarian-algorithm


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    将成本-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

    【讨论】:

    • 您忽略了首选项。可能你会做管道,但你会有多高兴(开玩笑)?
    • 对不起,我应该说偏好并不重要,只要我可以分配尽可能多的工作。
    • @ZiyaoWei 我不明白到底是什么偏好。
    • 大声笑,现在我必须学习最短参数路径方法,这是一个荣誉问题:p
    • @sap 有点难,你可以先学习一些基本的算法,然后尝试理解网络流和sap。
    【解决方案3】:

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

    【讨论】:

    • 感谢您的回答,我首先想到了这一点,但担心在行和列最小化后最终矩阵会被 0 填充(除了具有无限成本的位置),但也许那不是问题?我对算法还很陌生,正在努力学习它。
    • 这应该不是问题——这意味着可能有不止一个同样好的解决方案。
    【解决方案4】:

    匈牙利算法会给你一个答案,但不要使用无限成本,因为你无法比较 (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

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

    【讨论】:

    • 很遗憾,一般情况下无法确定这样的成本。
    • 这是真的 - 很长一段时间没有看匈牙利语了,但是由于偏好定义不太明确,所以很难修改它(我怀疑),除非像你和其他人一样答案是,忽略偏好。
    猜你喜欢
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 2015-09-02
    • 2018-06-14
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    相关资源
    最近更新 更多