最大限度地降低任务到机器分配的最大成本

时间:2016-07-15 03:51:50

标签: algorithm scheduled-tasks scheduling

我有 m 机器和 n 任务。有一个成本矩阵 A ,其中 Aij 是在机器 i 上执行任务 j 的成本。每项任务必须分配给一台机器,但每台机器可以接受多项任务。

我的问题是找到将任务分配给机器的方法,以最小化 MakeSpan ,这是任何一台机器的最高成本。

我该如何解决这个问题?我考虑使用匈牙利算法,但它最大限度地降低了总成本,而不是任何一台机器的最高成本。

1 个答案:

答案 0 :(得分:0)

您可以将问题表达为整数线性程序。如果我们将B[i][j]任务分配给B[i][j] = 1机器,则j为0和1的矩阵,其含义为i。任务不可分割的事实使得这个问题成为ILP而不是LP - 否则我们可以坚持0 <= B[i][j] <= 1

我们希望尽量减少任何机器的最高成本。这不是一个线性函数,但有一个标准的技巧来表达它,通过引入一个虚拟变量(在程序中称为MakeSpan)。

ILP是这个有m + n个约束的程序:

minimize MakeSpan such that

sum(B[i][j] for i=1..m) = 1 for all j
sum(B[i][j]*A[i][j] for j=1..n) <= MakeSpan for all i

第一组约束形式化了将每个任务分配给一台机器的想法。第二组约束是每台机器的成本最多为MakeSpan

MakeSpan等于任何机器的最高成本时,本地实现最小MakeSpan,并且当最大成本也最小化时全局实现。{/ p>

要解决ILP,您可以使用自己喜欢的ILP解算器。例如,GLPK是一个开源求解器。