基于遗传算法的任务调度研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华中师范大学计算机科学系实验报告书
实验题目:基于遗传算法的多任务调度研究课程名称:智能计算
主讲教师:沈显君
辅导教师:
课程编号:
班级: 2011级
实验时间: 2011年11月
基于遗传算法的多任务调度研究
摘要:
本文主要讨论了遗传算法在工程项目中多任务执行优化中的应用,重点对多任务调度 (Resource —constrained project scheduling problem ,RCPSP)问题进行了研究。讨论了资源受限的多任务调度问题,提出了改进的遗传算法优化多任务调度问题的方法,主要从优化算法模型的建立,优化算法设计,算法的实现以及结果分析等几个方面进行了详细论述,并与其它启发式方法进行了对比分析。 关键字:效益最优化;遗传算法;多任务
1.简介
任务调度优化在工程项目管理中是非常重要的,它决定了工程项目利润的高低。遗传算法是一种并行的全局搜索的高效求解问题的方法,本质上就是处理离散优化搜索问题的,它不要求问题空间的连续性,不需要梯度信息,其鲁棒性(Robust)已经得到了证实,在处理大型复杂优化问题上己经取得了显著的成绩,所以在解决多任务调度优化问题时,具有其它方法无法比拟的优势。
2.多任务调度模型的建立
假设存在若干并行任务和一个共享的资源库,包含有若干种可更新资源(renewable resources),并且所有资源都只有有限的供给量。任务之间除了共享资源外互相独立。为方便对问题进行描述,建立如下的数学模型:多任务调度问题有P 个相互独立的任务,第k 个任务包含n k+1个工作,其中第n k+ 1个任务为任务虚拟的终止工作,不占用资源和时间。这P 个任务共享M 种可更新资源,其中第m 种资源的总量为R m 。用W i 表示第i 个任务的工作集,W ij 表示第i 个任务中的第j 个工作,其工期为d ij ,对第m 种资源的需求量为r ijm ,任务的开始时间标记为S ij ,它的所有紧前任务形成的集合记为P ij 。在时间t 时正在进行的所有任务的集合标记为I t 。考虑到不同任务的重要程度不同,用a k 表示第k 个任务的权重。综合上述假设和采用的符号,资源约束下的多任务调度问题可以描述为公式(1)-(6):
∑=+∂
P
k n k k
k S 1
1,)
(*min
(1)
j
i P h d S S t s ij h i h i j i ,,,.
.,,,∀∈∀+≥ (2)
.,,
,∑∈∀≤t
j i I w m ijm
t m R r
(3)
{}kj
kj kj P
k d S t S Wk Wkj t I +≤≤∈==|)
(1
(4)
0≥ijm
r (5)
∑==∂
P
k k
1
1 (6)
3.算法设计
3.1资源约束的多任务调度问题的求解
由于是多个任务的之间的工作共享共同的资源,所以解决的方法与单个任务的之间的工作共享共同的资源的方法不同。在解决该问题的方法中,目前有文献[5]中提出的多种资源受限多任务排序问题的两层决策方法,但是该方法有两个很大的缺陷。首先,该方法中假设的前提条件是每个任务中共享资源的工作持续时间由所分配到的资源量决定,使用共享资源的工作持续时间与资源分配量成反比关系(如2台机器干6 天, 4台机器就干3天),即工作持续时间=工作的工作量÷资源量。而在现实生活中,很多工作的工作量并不是可累加的,即工作持续时间!= 工作的工作量÷资源量,所以对于任务中的工作是工作量不可累加的工作的问题,该模型就无法求解。第二个缺陷是,该模型对各个任务之间采取的是特定的资源分配策略,当资源分配给某个任务以后,就始终属于该任务了,其它任务就不能再使用该部分资源。这种资源分配方法会造成资源的较大浪费。因为在这种分配策略中,任务之间的资源不能相互流通调整。所以当其中某个任务有某类资源空闲时,其它任务均不能利用,这样该类资源就浪费了。
本文提出基于遗传算法的方法,能够求解任务中工作类型为不可累加的工作的多任务问题,而且各个任务之间资源是能够动态相互流通的,不会造成资源闲置而浪费,并且不用对多任务中各个任务的网络计划进行任何合并,只需要分别输入各个任务的工作的时间、资源等信息,就能对各个任务进行调度,按照各个任务的权重,使所有任务能以尽可能短的工期完工。
3.2算法中基本的数据结构的建立
在生成初始种群以前,首先要建立数据结构对各个任务的信息进行存储。
首先定义了一个二维数组benefit_matrix[m][n]。
其中,m 表示任务的数目,n 表示处理机数目。benefit_matrix[i][j]表示任务i 在处理机j 上处理所得的效益值。
int num_of_job; // 任务数,存储在文件numoftm.txt int num_of_machine; // 处理机数,存储在文件numoftm.txt int num_of_chromosomes; //群体数 ,存储在文件numofcolony.txt
int num_of_gen; // 产生的代数,也就是最后产生的那个代的序数,存储在文件num_of_gen.txt int **colony = NULL; //任务序列
int *benefit_array = NULL; // 任务调度序列中每个任务的效益组成的数组
3.3染色体结构和编码设计
资源受限的多任务调度问题可以也看作是服从某些约束条件的排序问题。解决问题的关键是如何应用遗传算法找到一个多任务中所有工作的一个合适排列顺序。在这里用按一定顺序排好的所有工作列表对问题进行染色体编码。设有m 个任务,每个任务有n 个工作,则共有m*n 个工作,即该染色体的长度为m*n 。令V k 表达当前种群中的第K 个染色体,令P kij 为染色体的一个基因,表示在染色体j 位置上的第P k 个任务中的工作,染色体可表达如下:
V k =[P 1i1,…, P 1ii ,…,P 1in ,…,P ki1,…, P kii ,…P kin ,…,P mi1,…, P mii ,…,P min ] 其中P kij 的顺序可在满足约束条件的前提下任意排列。
3.4染色体的初始化
对于染色体的初始化,本文分为两部分进行,一部分是通过拓扑排序的方法随机生成各个染色体,另一部分是通过各种启发式方法生成染色体。
方法一:随机生成初始染色体
该方法与单个任务的资源有限时间最短的优化调度方法类似,不同之处在于对于每个工作,首先要判断它属于哪个任务,然后才能确定它的约束关系。方法为以从左向右的固定顺序一次考虑一个未被确定最早开始时间的工作。在每一阶段,保持已排序的工作的集合,并完全随机的从可调度工作集合中选中一个工作安排到该集合中。这个过程一直重复下去,直到所有工作被安排。该过程的每一次迭代中所有的工作都处于下列三种状态之一:
①已排序的工作:已经在构造的部分染色体中的工作。 ②可调度工作:那些所有紧前工作都是已排序工序的工作。 ③自由工作:所有其他工作。
令t
k v 是v 的一个部分染色体,包括t 个活动。t Q 是在阶段t 与给定的t
k v 对应的可安排活动的集合,令Pi 是活动i 所有紧前活动的集合,则与给定t
k v 对应的可安排活动集合t Q 定义为: {}t
k
i
t v P j Q ⊂=
| (7)
它包括终节点在特定安排t
k v 中的活动,并且是所有竞争活动的集合。
其中修改可调度工作集Q t 的方法如下:a 、从Qt 中删除已经选中的工作j 。b 、判断工作j 的紧后工作中是否存在这样的工作k (工作k 属于自由工作),它的所有紧前工作都在已生成的部分染色体中,即它的所有紧前工作都是已排序工作。c 、若存在k,则把k 加入到可调度工作集Q t 中。
方法二:通过各种启发式方法生成初始染色体
白思俊一共归纳了31种启发式方法[7][8]。本文在此处选择了对任务资源优化调度比较有效的11种启发式方法,应用这11种方法生成了调度效果比较好的若干个染色体。 11种启发式准则如下:
(1)最小总时差优先准则(MinTS),若相同则按工作最早开始时间排。 (2)最大总时差优先准则(MaxTS),若相同则按工作最早开始时间排。 (3)最小工期优先准则(SOF),若相同则按工作编号排。 (4)最大工期优先准则(MOF),若相同则按工作编号排。 (5)最小LS 优先准则(MinLS),若相同则按工作编号排。