匈牙利算法是否有扩展可以满足每个工人分配多个工作的需求?在最简单的形式中,该算法将单个作业分配给单个工作人员。
我的申请是一个利润最大化问题,有 3 名工人和 180 个工作岗位。我还将添加约束(至少为每个工作人员分配 50 个作业)。
我已经设法使用 Python 中的 mungres 库实现了匈牙利算法,它运行良好。我只是在努力寻找与每个工人的多项任务相关的文献。
https://pypi.python.org/pypi/munkres
https://en.wikipedia.org/wiki/Hungarian_algorithm
https://en.wikipedia.org/wiki/Generalized_assignment_problem
我已经尝试了评论中列出的标准numpy方法,但无法将其扩展到每个工作人员的多个分配。如果我的矩阵是矩形的(即 3 个工作人员和 4 个作业),则只有前 3 个作业分配给工作人员。我也尝试添加虚拟变量来创建方阵,但随后将作业分配给这些虚拟工人而不是实际工人
方法 1
例如,一种简单的方法是为每个工作线程制作 50 个克隆,并正常解决问题。
要查找工作人员 1 的作业,您可以收集分配给工作人员 1 克隆的所有作业。 只有 50 个克隆,因此工作人员 1 最多分配到 50 个作业。
方法2
这种分配问题可以表示为最小成本流问题,如果工作人员执行作业,则存在从工作人员到作业的流。
在该配方中,每个工人的容量为 1 个流动单元。 然后,您只需根据需要增加容量即可增加作业数。
这种方法可能更有效(因为图形更小),但需要修改底层算法,而方法 1 应该很容易实现。
这可以通过将工人边界为 [50,inf] 的运输问题来表述为运输问题来解决。如果我错了,请纠正我,彼得解决方案的方法 1 适用于一个人最多可以做 50 个,而不是最小值。
检查:https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.optimize.linear_sum_assignment.html
线性和赋值问题也称为最小权重 二分图中的匹配。问题实例由 矩阵 C,其中每个 C[i,j] 是匹配顶点 i 的成本 第一部分集合("工作器")和第二部分集合的顶点 J(A "工作")。目标是找到完整的工人工作分配 成本最低。