用贪心算法近似求解 Loading Balance 问题(作业调度的负载均衡)

一,Loading Balance 问题描述:有 m 台相同的机器及 n 个作业,其中 m={M(1),M(2),……M(m)}、n = {J(1),J(2),……J(n)}。每个作业都有一个处理时间,记为t。如,;t(j)表示作业 J(j) 的处理时间。任意机器在某个时刻只能处理一个作业;一旦某个作业被调度到机器上处理,它就不能被抢占,直至它被处理完才能处理下一个作业。问:如何分配作业,使得处理完所有的作业所需的时间最少?

由于该问题是NPC的,因此很难找到该问题的最优解(精确解),下面用贪心算法求解一个近似解。

二,Loading Balance问题的两倍贪心近似解

贪心策略:总是优先给当前机器中负载最小的机器分配作业

设BS(best solution)为Loading Balance问题的最优解。BS 表示处理完所有的作业所需的最少时间,则:

1)BS >= max{t(1),t(2)……t(n)}      耗时最长的作业总会在某台机器上执行,BS一定比某个单一作业的执行时间要长(可能相等,如机器数目大于作业数目)

2)BS >= (1/m)*[(t(1)+t(2)+……+t(n)]    BS大于等于平均处理所有作业的时间。[(t(1)+t(2)+……+t(n)]表示所有作业的总量,m 表示所有机器数目。

由于在最优的分配方案下得到的最优解是BS,设在最优方案下各台机器的负载(处理时间)为{L(1),L(2)……L(m)}   L(i) 表示第 i 台机器的负载。

显然

a):BS=max{L(1),L(2)……L(m)}  因为只有当最大负载的机器处理完之后,才能说所有的作业都被处理完了。

b): ∑mi=1 = ∑nj=1        即:L(1)+L(2)+……+L(m) = t(1)+t(2)+……+t(n)

b)式成立的原因如下:等式左边表示所有的机器处理工作的任务量,等式右边表示所有的任务需要处理的时间之和。显然是相等的,只不过是换了个术语表达而已,一个称负载,一个称处理时间。

 

贪心分析如下:

设作业J(j) 是最后一个被调度的作业,它被调试到第 i 台机器m(i)上。由贪心策略可知:在作业J(j)被调度时,第 i 台机器的负载是最小的(因为,总是优先将作业调度到负载最小的机器上)。设此时第 i 台机器的负载为 Lm(i), 显然有:Lm(i) <= nj=1  (因为Lm(i) 表示机器负载的最小值,而等式右边表示的是负载的平均值)。
作业J(j)调度到第 i 台机器上时,此时Lm(i) + t(j) <= 2BS (因为Lm(i) <= BS and t(j) <= BS)

Lm(i) + t(j) 表示最后一个作业被调度且执行完后,机器m(i)上的负载,它的值即为贪心算法求解Loading Balance的解。

小问题:一般而言,Lm(i) + t(j) 表示贪心算法的解。若它不是贪心算法的解,则说明还存在着一个更大的负载值,那么这个更大负载的值会更接近两倍最优解 2*BS。(可以通过画一个模型图来理解)

 

负载均衡的拓展:

若将待调度的作业按作业的运行时间从大到小排序,且总是优先将大作业分配到当前负载最小的机器上,则此时贪心算法求解 Loading Balance 问题可达到 (3/2)倍的近似解(one point five)

原因如下:

在该贪心策略下,最后一个被调度的作业为J(l),其长度(运行时间)t(l) <= (1/2)*BS

分两种情况来讨论为什么t(l) <= (1/2)*BS

①作业数目小于机器的数目:此时最后一个被调度的作业为所有作业中长度最小的作业,任何算法得到的解即为第一个被调度的作业长度。该解满足1.5倍近似解范围。

②作业数目大于机器数目:由于作业是排好序的,故:t(1)>t(2)>……>t(m)>t(m+1)>…… 设J(l)是最后一个被分配的作业,则一定有:t(l)<=t(m+1)

因为作业的数目大于机器的数目,则一定有一台机器上运行了至少两个作业。假设J(l)分配到的机器已经运行了作业J(i),

则有:BS >=t(i)+t(l),又因为t(l)<=t(i),所以t(l)<=(1/2)*BS

 

posted @ 2015-06-02 17:48  大熊猫同学  阅读(2598)  评论(0编辑  收藏  举报