我对分配问题并不精通,并试图找到一种替代 Munkres/匈牙利方法的替代方法,该方法适用于分配问题的变体,其中:
- 某些作业是不允许的
- 可能无法将每个人/行分配给一个分配/列(在这种情况下,我只想进行尽可能多的分配 - 也许通过找到并使用最大的可解矩阵)
我已经能够修改 Munkres 实现来处理 #1,但它在以下情况下会崩溃:
[ D, D, 1, D, D, D, D, D]
[ D, D, D, D, 1, D, D, D]
[ 1, D, D, D, D, 1, 1, 1]
[ D, D, D, D, D, 2, 2, 2]
[ D, 1, D, D, D, 3, 3, 3]
[ D, D, 1, 2, 3, D, D, D]
[ D, D, 1, 2, 3, D, D, D]
[ D, D, 1, 2, 3, D, D, D]
# ("D" = disallowed)
最终无法通过:
[ D, D, 0, D, D, D, D, D]
[ D, D, D, D, 0, D, D, D]
[ 0, D, D, D, D, 0, 0, 0]
[ D, D, D, D, D, 0, 0, 0]
[ D, 0, D, D, D, 0, 0, 0]
[ D, D, 0, 0, 2, D, D, D]
[ D, D, 0, 0, 2, D, D, D]
[ D, D, 0, 0, 2, D, D, D]
我应该使用另一种算法来处理这个问题吗?或者在将其传递给算法之前使用某种算法方法来检测上述无法解决的情况(如果我每次都首先运行算法来检测这些情况会变得相当昂贵)?
作为参考,这是我正在使用的代码(在 Python 中): https ://github.com/knyte/munkres/blob/master/munkres.py