当前位置:文档之家› 大型项目任务分配问题

大型项目任务分配问题

一、 问题重述
假设有m 个人,共同完成n 项工作,(n>m ≥2)。

每个人可以干任何一件工作,但效率不同,任意时刻每个人只能干一件工作,每项工作只能由一人独立完成。

如果这m 个人任选一项工作同时开始干,每个人干完一件工作后,立即选一项还没有人干过的工作接着干,直到所有n 项工作全部完成。

从开始工作到最后一项工作完成的时间称为总完成时间,简称总时间,记为T 。

为使总时间T 尽量小,请对以下三种情况,分别确定每个人应干哪几项工作?顺序如何?并求出T 。

对一般情况进行讨论
(1) X1=(2, 3, 8, 9, 10, 7, 6) , X2=(3, 8, 5, 9, 7, 6, 4)。

(2) X1=(44, 37, 39, 25, 26, 49, 11, 49, 51, 46, 13, 31, 11, 50, 29, 16, 54, 13,
58, 29, 37, 49, 13, 40, 34, 25, 42, 43, 24, 24, 52),
X2=(52, 37, 60, 56, 22, 45,60, 23, 37, 16, 60, 44, 11, 39, 16, 16, 50, 25,
13, 25, 30, 26, 58, 59, 31, 24, 19, 19, 43, 31, 31)。

(3) X1=(46, 27, 42, 21, 20, 40, 15, 33, 56, 24, 50, 29, 25, 56, 42, 42, 32, 15,
39, 45, 56, 52, 12, 38, 56, 32, 44, 36, 36, 34, 28, 31, 24, 13, 23, 59,
14, 30, 29, 35, 18, 34, 23, 42, 38, 18, 57, 43, 36, 30, 16, 50, 33, 48,
40, 52, 11, 21, 14, 16, 27, 17),
X2=(11, 37, 43, 38, 52, 15, 20, 44, 33, 28, 18, 46, 57, 37, 15, 48, 31, 34,
35, 21, 27, 15, 40, 19, 57, 15, 33, 24, 54, 48, 24, 44, 23, 15, 12, 27,
50, 25, 22, 35, 23, 28, 13, 35, 21, 54, 40, 48, 57, 27, 38, 15, 42, 31,
59, 16, 57, 42, 28, 18, 34, 21)。

X3=(46, 37, 39, 25, 26, 49, 11, 49, 51, 46, 13, 31, 35, 50, 29, 59, 54, 13,
58, 29, 37, 15, 13, 40, 34, 25, 42, 43, 24, 24, 52, 52, 40, 60, 21, 22,
45, 60, 23, 37, 16, 60, 44, 11, 39, 16, 16, 50, 25, 13, 25, 30, 26, 58,
59, 31, 24, 19, 19, 43, 31, 31)
二、问题分析
我们的任务是寻找一个最佳调度方案,使总完成时间最短,该问题是一个NP 难题,不存在有效算法。

求解大规模问题要用近似算法。

最好能找到一个评价结果的指标。

下面给出总时间的一个下界。

设Y 是最短时间向量,如果每人都用Y 中的时间来干工作,中间无间息,且每人的最后一项工作都同时干完,这时的总时间T 最小,为T 0
因此有如下结论
定理
根据上述定理,计算出一个特定问题的下限很容易,对本问题的三种情形可计算出其下限。

(1) T 0= (2)T 0= 807 = 403.5 (3)T 0= 1395 = 465 ∑=≤≤=n j ij m
i a m T 110)(min 1∑=≤≤≥n
j ij m i a m T 11)(min 118)4679532(21=++++++⨯⨯=∑=21y 21311i i ⨯=∑
=31y 31621i i
三、优化模型
引入一个0,1变量x ij
⎩⎨⎧=否则
人做项工作由第第01i j x ij
设第i 人完成第j 项工作的时间是a ij ,T 为从开始工作到最后一项工作完成的时间即总时间。

则可得如下优化模型 n
j m i x n
j x
t s x a T ij m i ij n
j ij ij m i ,1,,110,,2,11..}{max min 111======∑∑==≤≤,或
可以用隐枚举法和分支定界方法(利用分解技术),割平面法(松弛技术)来求解,但这些方法不是有效算法,无法解规模大的问题。

四、启发式算法(近似)
1.贪婪算法(计算机模拟)
例.X1=(2, 3, 8, 9, 10, 7, 6) , X2=(3, 8, 5, 9, 7, 6, 4)
Y=(2,3,5,9,7,6,4)
向量Y=(b1,b2,…,b n),
其中b j=min{a1j,a2j,…,a mj},称Y为各项工作的最短时间向量。

称向量Z i=X i–Y为第i人对Y的误差向量。

算法步骤:
1)令t=0;
2)对当前无工作做的i,任选Z i中未做的一个最小分量所对应的工作干;
3)令t为当前所有在干的工作中最先结束的结束时间;
4)重复2),3)直到所有工作干完为止。

设Y1为各项工作的第二短时间向量。

令∆Y=Y1-Y称为罚数向量。

算法步骤:
1)令t=0;
2)对当前无工作做的i,在Z i里未做的最小分量所对应的工作中选择∆Y尽可能大的分量所对应的工作干;
3)令t为当前所有在干的工作中最先结束的结束时间;
4)重复2),3)直到所有工作干完为止。

2.逐步改进算法
算法步骤:
1)让每件事由所需时间最少的人做;
2)计算出每个人的完成时间,找出完成指派工作所需时间最多的人(最繁忙者)与所需时间最少的人(最闲暇者);
3)若最繁忙者所做的工作均标有#,则停止,此指派方案即为一个近似最优方案;
4)求最繁忙者所做的每个工作的工作时间与最闲暇者的工作时间差,其绝对值最小的
工作转给最闲暇者做。

5)若此二人完成时间的较大者变小,记录新方案,清除标记,转2);否则,维持原方案,并将该工作记上标记#,转4)。

3.启发式随机搜索算法
算法步骤:
1)用贪婪算法得到一个工作分配方案,令k=0;
2)随机选择两人,任意将其中一人的工作分配给另一人或者交换这两人的任意一对工作;
3)判断新方案是否更优?是,k←k+1,记录下新方案,执行下一步,否则直接执行下一步;
4)判断k>=N否?是,停止,否则,转2)。

4.模拟退火算法
1)用贪婪算法得到一个初始解x0,令k←0,选定初始温度t0和末温t f,确定降温策略(如取t k+1=t k*0.87)和内循环次数L k,t←t0;
2)产生新解x1:随机选择两人,任意将其中一人的一个工作分给另一人或交换这两人的任意一对工作,计算新解和原解的目标函数值的差∆f;
3)若新解更优,则x0←x1,否则,以一定概率(可取为exp(-∆f/t))接受新解;
4)重复2),3)到给定次数L k;
5)t←t*0.87,k←k+1,重复2)至4)直到t>tf为止。

注:可以增设记忆功能,将前面计算过的解中,最优的解记录下来,效果更好。

五、注意
1)这是一个NP难题,不存在精确的有效算法,求解大型问题要用近似的有效算法。

2)描述算法时,要就一般情况(m个人,n项工作)给出算法步骤.由于是近似算法,最好给出最优解的下界计算公式,据此对结果进行近似程度分析;
3)智能算法,如模拟退火算法和遗传算法等中的参数选择可能会很花时间,选得不合适,效果也会不好;
4)最好能给出模型,如0-1规划模型。

5)最好对给出的算法进行时间复杂度分析,表明是否有效算法;
6)可进一步对算法进行灵敏度分析,比如,自己构造一些实例对算法的计算时间和精度进行测试,不只是限于题目所给出的三个特例;
以下做法不可取
1)只是针对题目中三种特殊情形描述算法,不将其一般化到m个人,n个工作的情形;
2)不考虑算法的计算时间,
3)没有总结出算法步骤。

六、参考文献
1.刑文训谢金星,现代优化计算方法,清华大学出版社,2001年;
2.张颖刘艳秋, 软计算方法,科学出版社,2002年;
3.王晓东, 算法设计与分析,清华大学出版社, 2003年.
4.(美) Zbigniew Michalewicz,等著,曹宏庆等译,如何求解问题_现代启发式方法,中国水利水电出版社, 2003年.。

相关主题