【问题标题】:Second best solution to an assignmentproblem using the Hungarian Algorithm使用匈牙利算法的分配问题的第二最佳解决方案
【发布时间】:2013-12-01 17:25:34
【问题描述】:

要在分配问题中找到最佳解决方案,使用匈牙利算法很容易。 例如:

A |  3  4  2
B |  8  9  1
C |  7  9  5

在这方面使用匈牙利算法时,您会变成:

A |  0  0  1
B |  5  5  0
C |  0  1  0

这意味着 A 被分配到“工作”2,B 被分配到工作 3,C 被分配到工作 1。 但是,我想找到第二好的解决方案,这意味着我想要成本严格高于最优解决方案的成本的最佳解决方案。根据我的说法,我只需要在最后一个矩阵中找到具有最小和的分配,而不是与最优相同。我可以通过在树中搜索(修剪)来做到这一点,但我担心复杂性(O(n!))。有什么我不知道的有效方法吗?

我正在考虑一种搜索,首先对行进行排序,然后贪婪地首先选择最低成本,假设大多数最低成本将弥补最小总和 + 修剪。但是假设匈牙利算法可以产生一个有很多零的矩阵,那么复杂性又是可怕的......

【问题讨论】:

    标签: matrix hungarian-algorithm


    【解决方案1】:

    您所描述的是 K 最佳分配问题的一个特例——事实上 Katta G. Murty 在以下 1968 年的论文“An Algorithm for Ranking all the Assignments in Order of Increasing Cost.”中提出了这个问题的解决方案运筹学 16(3):682-687。

    看起来实际上有相当数量的实现,至少在 Java 和 Matlab 中,可在网络上获得(参见例如 here。)

    【讨论】:

    • 谢谢!这正是我想要的。
    • 很长一段时间过去了......然后我自己尝试了java算法并验证它不像宣传的那样工作。例如它表示“D = [1 1 100; 100 1 1; 100 2 1 ];”的第二个最佳分配是 1-2-0,而不是 0-2-1。 (正确显示第一个是 0-1-2)
    【解决方案2】:

    中,现在在 muRty 包中实现了 Murty 算法。

    CRAN

    GitHub

    它涵盖:

    • 在最小和最大方向上进行优化;
    • 按等级输出(类似于 SQL 中的密集等级),以及
    • 使用匈牙利算法(在clue 中实现)或线性规划(在lpSolve 中实现)解决初始分配问题。

    免责声明:我是包的作者。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-18
      • 2015-06-15
      • 1970-01-01
      • 2011-05-03
      • 2015-09-02
      • 1970-01-01
      • 1970-01-01
      • 2019-09-20
      相关资源
      最近更新 更多