Algorithm 非标准指派的Munkres算法问题

Algorithm 非标准指派的Munkres算法问题,algorithm,matching,Algorithm,Matching,我有一个分配问题的变体,通常的Munkres/匈牙利算法似乎无法解决 在传统的分配问题中,有n个工人需要分配到n个工作,并且有一个矩阵包含每个工人分配到每个工作的成本 在这种变化中,我们只有m(m

我有一个分配问题的变体,通常的Munkres/匈牙利算法似乎无法解决

在传统的分配问题中,有n个工人需要分配到n个工作,并且有一个矩阵包含每个工人分配到每个工作的成本

在这种变化中,我们只有m(m 我们希望施加一个约束,即每个类别中至少有一个工作分配给一个真实(非虚拟)工人。这很难优雅地完成:例如,您可以从每个类别中随机挑选一份工作,人为地降低每个实际员工的相关成本,但这是一个非常粗糙的解决方案,严重影响了最终分配的完整性

我们目前所做的是多次运行该算法,每次评估输出分配,然后修改成本矩阵,以使仅分配虚拟工人的任何类别中的所有作业的成本略微降低。这可以充分发挥作用,但对于中等规模的数据集(n~=500),这一过程可能需要一段时间(每个Munkres赋值可能需要10秒的时间来计算,并且对于足够的类别,可能会有大量的迭代)


是否有一种改进的Munkres算法或完全不同的算法可以更有效地解决此问题?

类别是否不相交?每个工作都有一个类别?那么,最低成本流呢

节点类型:

SRC - source
SNK - sink
C - a node or each category
J - a node for each job
W - a node for each worker
连接:

1) from SRC to C, capacity 1, cost 0
2) from SRC to C, capacity infinite, cost a high number
3) from C to J, capacity 1, cost 0
4) from J to W, capcity 1, the cost of job J done by worker W
5) from W to SNK, cost 0, capacity 1

然后,算法将首先填充类型1的链接,这意味着每个类别将获得至少一个工作者(如果可能)。

谢谢,这看起来很有希望。我不熟悉最小成本流——现在就研究它——所以这可能是一个愚蠢的问题,但是这个公式能保证每个工人都被分配一份工作吗?是的,最小成本流是分配问题的推广,没有C节点,这是标准的分配问题。匈牙利算法解决了分配问题。