使用匈牙利算法的分配问题的第二个最佳解决方案

时间:2013-12-01 17:25:35

标签: matrix hungarian-algorithm

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

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!))。有什么有效的方法我不知道吗?

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

2 个答案:

答案 0 :(得分:4)

你描述的是 K最佳作业问题的一个特例 - 事实上,Katta G. Murty在随后的1968年论文“{{3}”中提出了解决这个问题的方法。 }“运筹学16(3):682-687。

看起来实际上有相当数量的实现,至少在Java和Matlab上,可以在网上找到(参见例如An Algorithm for Ranking all the Assignments in Order of Increasing Cost.。)

答案 1 :(得分:0)

中,muRty包中提供了Murty算法的实现。

CRAN

GitHub

涵盖:

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

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