匈牙利算法的扩展是否适合为每个工作人员分配多个工作?在最简单的形式中,算法将单个作业分配给单个工作者。
我的申请是一个利润最大化问题,有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个工作分配给工人。我也尝试添加虚拟变量来创建一个方形矩阵,但是然后将工作分配给那些虚拟工作者而不是实际工作者
答案 0 :(得分:3)
这样做的一个简单方法是制作每个工人的50个克隆并正常解决问题。
要查找工人1的工作,您可以收集分配给工人1克隆的所有工作。只有50个克隆,因此工人1将被分配到最多50个工作。
这种分配问题可以表示为最小成本流问题,如果工人找到工作,就会有从工人到工作的流量。
在这个配方中,每个工人的供应量为1个流量单位。然后,您可以通过简单地根据需要增加容量来增加作业数量。
这种方法可能更有效(因为图表更小)但需要修改基础算法,而方法1应该无法实现。
答案 1 :(得分:0)
线性和指派问题也称为最小权重 在二分图中匹配。问题实例由a描述 矩阵C,其中每个C [i,j]是匹配顶点i的代价 第一个部分集(“工人”)和第二个集合的顶点j(a “工作”)。目标是找到一份完整的工人分配工作 最低成本。
答案 2 :(得分:0)
这可以通过将其表示为具有[50,inf)界限的工人的运输问题来解决。如果我错了,请纠正我,彼得的解决方案中的方法1是一个人最多可以做50次,而不是最少做一次。