本发明涉及项目调度领域,具体涉及一种无需参数综合设置的资源受限项目调度方法。
背景技术:
资源受限项目调度问题(resource-constrainedprojectschedulingproblem,rcpsp)是运筹学领域中一个极具挑战性的研究问题,且广泛地存在于制造企业的生产实践中,自其提出以来就一直吸引着众多的学者对其进行研究,合理的调度计划能有效地降低项目成本,缩短项目工期,提高项目质量。rcpsp已被证明是许多其他经典调度问题(如jobshop、flowshop)的一种泛化问题,且是强np-hard的,因此对其进行求解和研究具有十分重要的理论和实际意义。
rcpsp可描述为:一个项目由n个活动组成,其中第1个和第n个为虚活动,分别对应项目唯一的开始活动和结束活动。项目调度必须在满足时序约束和资源约束的条件下进行。活动q必须在其所有紧前活动p(p∈pq,pq为任务q的紧前活动集)都完成后才能进行。设可更新资源集合r具有k种可更新资源。活动以非抢占的方式执行,活动q在其工期dq内,每个单位时间需使用第k(k∈r)种资源rqk个单位。第k种资源在每个单位时段的可用量为rk。参数dq、rqk和rk都是确定性的非负数,且d1=dn=0,r1k=rnk=0(k∈k),对活动的调度目标通常是是最小化项目工期(makespan)。
基于种群的进化算法作为启发式算法中的一个重要分类,是当前求解rcpsp问题的研究热点。其虽不能保证求得问题的最优解,但求解速度快,可求得问题的近优解,很好地兼顾了求解质量和求解效率的均衡,被认为是解决中、大规模项目调度问题的有效方法之一。
然而,这些基于种群的进化算法在求解rcpsp问题时,往往都存在以下的不足:(1)进化易于陷入停滞的状态,这主要是因为在进化的过程中,普通个体向最优个体聚集,造成了种群的快速趋同,种群的多样性逐渐变差。(2)大部分进化算法在提出时主要是为了解决连续型变量的数值优化问题,其种群更新公式通常基于实数值运算,因此在求解rcpsp问题时主要采用优先值(实数)的方式进行编码,而优先值的编码方式是不考虑时序约束的,这就造成在解码时需要重新考虑活动的时序关系,从而造成求解效率和求解质量都不高的情况。(3)这些算法都普遍存在一个典型问题,就是针对不同的问题情况(如项目规模、项目复杂度、资源强度)需要设置不同的参数(如遗传算法的交叉概率、选择概率,粒子群算法的惯性权重、学习因子等),合理设置这些参数是算法找到最优解的关键,且算法参数的一点改变都会影响到算法求解的有效性,此外,这些算法参数的综合设置往往都需通过大量的试错实验来确定,这又降低了算法的求解效率。
技术实现要素:
为了克服现有技术的缺陷,本发明提供一种无需参数综合设置的资源受限项目调度方法,能够有效避免参数的复杂综合设置,提高了适用性和求解效率。
针对以上发明目的,本发明是这样加以解决的:一种无需参数综合设置的资源受限项目调度方法,其步骤包括:
s1、生成一个包括多个个体的种群;
s2、对种群进行优化更新;
s3、返回步骤s2进行迭代更新,迭代一定次数后输出种群中的评价最优的个体。
相比于现有技术,本发明不需要针对不同的问题情况(如项目规模、项目复杂度、资源强度)设置不同的参数(如遗传算法的交叉概率、选择概率,粒子群算法的惯性权重、学习因子等),只需设置种群中个体数量以及迭代次数即可,变量少,适用性广,求解效率高;其中每个个体除了活动的排列顺序不同以外,包括的活动数量、活动类型等参数都相同。
进一步地,所述步骤s2为:
s2.1、使用精英学习算子优化更新种群;
s2.2、使用随机学习算子优化更新种群。
在每次迭代过程中,先使用精英学习策略来优化更新种群,避免了个体的盲目搜索,加快了算法的收敛;然后再使用随机学习策略来优化更新种群,避免了种群的快速趋同,增加了种群的多样性。
进一步地,所述个体包括若干活动,步骤s2.1具体为:根据种群的中值个体mean中活动排列和评价最优的个体best中活动排列的偏差,得出使mean中活动位置移动后成为best的第一优化移动规律,所有个体分别根据第一优化移动规律进行移动,如果所有个体中存在有移动后的评价比移动前的评价好的个体,则用移动后个体代替移动前个体,形成新的种群。
进一步地,所有个体根据第一优化移动规律进行移动,得到新的个体
其中xi是种群中的第i个个体,l是一个n维的向量,每一维随机取值0或1,n为个体中活动的数量,i=1,2,...,np,np为种群中个体的数量,(best-mean)表示第一优化移动规律,xi+l·(best-mean)表示xi根据随机取维后的第一优化移动规律进行移动。第一优化移动规律也即表示mean中的每个活动在best中的相应位置。根据l中每一维的随机取值,决定best-mean中相应维的活动移动是否选中,所以,xi+l·(best-mean)表示xi根据随机取维后的第一优化移动规律进行移动。
进一步地,所述中值个体mean按如下步骤求得:
s2.1.1、计算种群个体xk中每一个活动的位置,将这些位置按照递增顺序排列,形成位置列表
s2.2.2、根据下式计算位置列表
其中round表示对右边括号中的每一项进行取整,得到mp=(m1,m2,...m,b...m,n),mb为取整后的位置均值;
进一步得到中值移动规律mp'=((1,m1),(2,m2),...,(b,mb),...,(n,mn)),(b,mb)表示第b个活动要被移动到位置mb,b=1,2,...,n;
s2.2.3、活动列表sal=(1,2,...,n)根据mp’对其中的活动位置进行移动后,即可得到中值个体mean。
进一步地,所述步骤s2.2具体为:对所有种群中的所有个体进行更新;在每一个个体xj的更新过程中,从种群中随机取一个不同的个体xm,分别对这两个个体进行评价,根据评价较优个体中的活动排列和评价较差个体中活动排列的偏差,得出使评价较差个体中活动位置移动后成为评价较优个体的第二优化移动规律,xj根据第二优化移动规律进行移动,得到新的个体
进一步地,根据下式得到新个体
其中,rand为[0,1]间的均匀随机数,j=1,2,...,np,np为种群中个体的数量,xj是种群中的个体,xm是种群中异于xj的个体,makespan(xj)表示对xj的评价指标,makespan(xm)表示对xm的评价指标,评价指标越小,评价越好,rand·(xm-xj)表示为从xm-xj中随机选择round(rand×|xm-xj|)个元素,|xm-xj|表示xm-xj中元素数量,rand·(xj-xm)表示从xj-xm中随机选择round(rand×|xj-xm|)个元素,|xj-xm|表示xj-xm中元素数量,round表示对括号中的计算结果进行取整,xm-xj以及xj-xm分别表示第二优化移动规律;xj+ran·(dxm-xj)以及xj+rand·(xj-xm)分别表示xj根据随机选取元素后的第二优化规律进行移动。
进一步地,所述个体根据不同移动规律进行移动的步骤表示为x+(d,topos),x为个体,(d,topos)为移动规律,其中d表示活动,topos表示d移动后的位置,具体为:
s4.1、对topos进行规范化,使其在d的可移动范围内:
ll(d),rl(d)分别为d可以向左、向右移动的限制位置,ll(d)=|apd|+1,rl(d)=n-|asd|,|apd|、|asd|分别表示d的前驱apd和后继asd的数量,apd是指必须排在d前的活动、asd是指必须排在d后的活动,
s4.2、将d移动到位置topos:
s4.2.1、计算d的移动长度mlen=pxd-topos,pxd为d在个体x中的位置;
若mlen>0:
x中排在d之前的活动构成第一子列表ltemp,将d的所有apd从ltemp中移除,取ltemp中排在后面的mlen个活动构成第二子列表l′temp,从x中移除l′temp中包含的活动,将l′temp插入d之后;
若mlen<0:
x中排在d之后的活动构成第一子列表ltemp,将d的所有asd从ltemp中移除,取ltemp中排在前面的mlen个活动构成第二子列表l′temp,从x中移除l′temp中包含的活动,将l′temp插入d之前。
进一步地,使用基于遗憾值带有偏好的随机样本算法来生成种群pop0。
进一步地,评价的指标为个体的工期。当工期越长,也即个体需要的时间更长,评价就越低;当工期越短,也即个体需要的时间更短,评价就越高。
相比于现有技术,本发明的有益效果为:不需要针对不同的问题情况(如项目规模、项目复杂度、资源强度)设置不同的参数(如遗传算法的交叉概率、选择概率,粒子群算法的惯性权重、学习因子等),只需设置种群中个体数量以及迭代次数即可,变量少,适用性广,求解效率高。
附图说明
图1是本发明的流程图。
具体实施方式
下面结合具体实施例和附图对本发明进行详细地说明。
如图1所示的一种无需参数综合设置的资源受限项目调度方法,其步骤包括:
s1、根据实际的项目调度问题生成一个包括多个个体的种群;
s2、对种群进行优化更新;
s3、返回步骤s2进行迭代,迭代一定次数后输出种群中的评价最优的个体。
相比于现有技术,本发明不需要针对不同的问题情况(如项目规模、项目复杂度、资源强度)设置不同的参数(如遗传算法的交叉概率、选择概率,粒子群算法的惯性权重、学习因子等),只需设置种群中个体数量以及迭代次数即可,变量少,适用性广,求解效率高;其中每个个体除了对活动的排列为随机以外,包括的活动数量、活动类型等参数都相同,种群的生成具体使用基于遗憾值带有偏好的随机样本算法。
所述步骤s2为:
s2.1、使用精英学习算子优化更新种群;
s2.2、使用随机学习算子优化更新种群;
在每次迭代过程中,先使用精英学习策略来优化更新种群,避免了个体的盲目搜索,加快了算法的收敛;然后再使用随机学习策略来优化更新种群,避免了种群的快速趋同,增加了种群的多样性。
所述个体使用可行活动列表来表示,可行活动列表即为满足时序约束的一个活动排列,其中包括n个活动,对每个可行活动列表使用串行调度产生方案来解码,求得整个项目,也即个体(可行活动列表)的工期,个体(可行活动列表)xi的工期记为makespan(xi),即为可行活动列表的评价指标;可行活动列表的工期越短,则评价越好;步骤s2.1具体为:根据种群的中值个体mean中活动排列和评价最优的个体best中活动排列的偏差,得出使mean中活动位置移动后成为best的第一优化移动规律,所有个体分别根据第一优化移动规律进行移动,如果所有个体中存在有移动后的评价比移动前的评价好的个体,则用移动后个体代替移动前个体,形成新的种群。
所有个体根据第一优化移动规律进行移动,得到新的个体
其中xi是种群中的第i个个体,l是一个n维的向量,每一维随机取值0或1,n为个体中活动的数量,i=1,2,...,np,np为种群中个体的数量,作为优选,种群个体数np=20,最大迭代次数tmax=100,(best-mean)表示第一优化移动规律,xi+l·(best-mean)表示xi根据随机取维后的第一优化移动规律进行移动。第一优化移动规律也即表示mean中的每个活动在best中的相应位置。根据l中每一维的随机取值,决定best-mean中相应维的活动移动是否选中,所以,xi+l·(best-mean)表示xi根据随机取维后的第一优化移动规律进行移动。
best-mean具体定义为一组活动移动构成的向量,即从mean开始,每次将一个活动移动到其在best中的位置所构成的向量。一个活动移动定义为一个二元组
所述中值个体mean按如下步骤求得:
s2.1.1、计算种群个体xk中每一个活动的位置,将这些位置按照递增顺序排列,形成位置列表
s2.2.2、根据下式计算位置列表
其中round表示对右边括号中的每一项进行取整,得到mp=(m1,m2,...,mb...,mn),mb为取整后的位置均值;
进一步得到中值移动规律mp'=((1,m1),(2,m2),...,(b,mb),...,(n,mn)),(b,mb)表示第b个活动要被移动到位置mb,b=1,2,...,n;
s2.2.3、活动列表sal=(1,2,...,n)根据mp’对其中的活动位置进行移动后,即可得到中值个体mean。
所述步骤s2.2具体为:对所有种群中的所有个体进行更新;在每一个个体xj的更新过程中,从种群中随机取一个不同的个体xm,分别对这两个个体进行评价,根据评价较优个体中的活动排列和评价较差个体中活动排列的偏差,得出使评价较差个体中活动位置移动后成为评价较优个体的第二优化移动规律,xj根据第二优化移动规律进行移动,得到新的个体
根据下式得到新个体
其中,rand为[0,1]间的均匀随机数,j=1,2,...,np,np为种群中个体的数量,xj是种群中的个体,xm是种群中异于xj的个体,makespan(xj)表示xj的工期,makespan(xm)表示xm的工期,工期越小,评价越好,rand·(xm-xj)表示为从xm-xj中随机选择round(rand×|xm-xj|)个元素,|xm-xj|表示xm-xj中元素数量,rand·(xj-xm)表示从xj-xm中随机选择round(rand×|xj-xm|)个元素,|xj-xm|表示xj-xm中元素数量,round表示对括号中的计算结果进行取整,xm-xj以及xj-xm分别表示第二优化移动规律;xj+ran·(dxm-xj)以及xj+rand·(xj-xm)分别表示xj根据随机选取元素后的第二优化规律进行移动。xj+rand·(xm-xj)定义为将rand·(xm-xj)中的每个活动移动依次作用于xj;同理,xj+ran·d(xj-xm)定义为将rand·(xj-xm)中的每个活动移动依次作用于xj。
如若xj=(1,6,4,2,5,3,7,9,8,10,11,12),xm=(1,2,3,4,5,6,7,8,9,10,11,12),则xj-xm=((1,1),(2,4),(3,6),(4,3),(5,5),(6,2),(7,7),(8,9),(9,8),(10,10),(11,11),(12,12)),则xj-xm中的元素数量|xj-xm|=12,若rand=0.3,则从xj-xm中随机选择的元素个数round(rand×|xj-xm|)是4,如随机选择的元素为:(2,4),(3,6),(5,5),(8,9),则rand·(xj-xm)=((2,4),(3,6),(5,5),(8,9))。
所述个体根据不同移动规律进行移动的步骤表示为x+(d,topos),x为个体,(d,topos)为移动规律,其中d表示活动,topos表示d移动后的位置,具体为:
s4.1、对topos进行规范化,使其在d的可移动范围[ll(d),rl(d)]内:
s4.2、将d移动到位置topos:
s4.2.1、计算d的移动长度mlen=pxd-topos,pxd为d在个体x中的位置;
若mlen>0:
x中排在d之前的活动构成第一子列表ltemp,将d的所有apd从ltemp中移除,取ltemp中排在后面的mlen个活动构成第二子列表l′temp,从x中移除l′temp中包含的活动,将l′temp插入d之后;
若mlen<0:
x中排在d之后的活动构成第一子列表ltemp,将d的所有asd从ltemp中移除,取ltemp中排在前面的mlen个活动构成第二子列表l′temp,从x中移除l′temp中包含的活动,将l′temp插入d之前。
如要将x=(1,6,4',2,5,3',7,9,8*,10,11',12)中的活动d=8(用*标注,pxd=9,其前驱apd和后继asd则用'标注)移动到x中的位置topos=6,则移动后得到的个体(仍为可行活动列表)x'=(1,6,4',2,3',8*,5,7,9,10,11',12),具体为:
mlen=9-6=3;mlen>0,则第一子列表ltemp=(1,6,4',2,5,3',7,9),移除ltemp中的apd,ltemp=(1,6,2,5,7,9),取ltemp中后3个活动构成第二子列表l′temp=(5,7,9),从x中移除l′temp中包含的活动,得到x=(1,6,4',2,3',8*,10,11',12),最后将l′temp插入到d之后,得到新的个体x'=(1,6,4',2,3',8*,5,7,9,10,11',12)。