匈牙利算法具有不等数量的工人和任务

时间:2015-12-11 22:03:03

标签: algorithm optimization hungarian-algorithm

我有一个问题困扰我一段时间。

我们有“工人”w_0,w_1 ... w_n,以及任务t_0,t_1,... t_m和持续时间D_ij,使得w_i可以在该小时数内完成t_j。每个工作人员还有最多可以工作的小时数m_0,m_1 ... m_n。

多个工作人员可以通过按比例分配的工作来完成相同的任务。例如,如果D_11 = 2且D_21 = 4,则工作人员1在任务1上的效率是工作人员2的两倍。因此,您可以组合,例如, 1小时1的工作和2个2的工作完成任务。

我们如何确定完成所有任务的最短时间。

我尝试使用贪婪技术为每项任务选择最佳工作者,但这并不适用于每种情况。例如,工人1可以在2小时内完成任务1,在4小时内完成任务3。很明显,工人1将被选中从事任务1的工作,尽管如此,让我们说任务3对于其他工人来说非常耗时,而工人1对于这项工作来说是完美的。

我已经考虑过将问题减少到分配问题,但没有找到方法。

如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

有一个直截了当的linear programming表述。

首先,我们将持续时间D ij 转换为R ij 由R ij = 1 / D ij 。接下来,我们定义决策变量x ij ,表示工作者在任务j上工作的时间量。

目标只是x ij 的所有i和j的总和。约束是:

  1. 没有工人超过他们的最长时间:对于每个i,x ij 的所有j的总和小于或等于m i

  2. 每个作业都完成了:对于每个j,R ij * x ij 中所有i的总和大于或等于1

  3. 没有人可以负面工作时间:对于所有i和j,x ij 大于或等于零

  4. 维基百科页面提供了指向various linear solver software的链接。