1.一种基于启发式离散人工蜂群算法的软件项目调度方法,其特征在于,包括以下步骤:步骤S1,读取项目的输入信息,定义优化目标,设定约束条件:项目的输入信息包括每个任务的工作量、技能要求、技能难度和任务优先级图,每位员工的已有技能、已有技能熟练度、学习能力、可投入的最大工作量、正常月薪和加班月薪;优化目标为最佳员工‑任务调度方案中,项目工期和项目成本加权求和值最小;约束条件包括任务技能约束和员工不允许超负荷工作;
步骤S2,针对项目新技能需求,设计新技能学习机制,新技能学习机制包括员工选择学习新技能、新技能熟练度的增长曲线函数及其投入度的自适应变化;
步骤S3,初始化启发式离散人工蜂群算法参数;
步骤S4,生成初始蜜源种群,并计算每个蜜源的目标值:
采用整数编码,随机生成SN个蜜源个体,每个个体的编码均为M×N的矩阵:Y=(yij)M×N,i=1,2,...,M,j=1,2,...,N;
其中,Y表示个体编码矩阵,yij∈{0,1,2,...,h},h表示解的粒度,即将员工Ei的最大投入度 平均分为h份; 为第i个员工Ei能够对本项目投入的最大工作量占全日制工作量的百分比,yij表示,元素yij的含义是员工Ei将自己最大投入度 的yij/h奉献给任务Tj;通过每个任务Tj占据每个员工Ei最大贡献度 的比例yij/h,将个体矩阵转化为员工‑任务的分配矩阵X=(xij)M×N,转化公式如下:其中,
计算初始种群中每个个体的目标值:
f(X)=ωt·tdur+ωc·cost
其中,f(X)表示个体的目标值,tdur为项目工期,cost表示项目成本,ωt、ωc表示预定义的参数,用于调整项目总工期tdur和项目成本cost的相对重要性;
步骤S5,引领蜂采用多元学习方法对所有蜜源个体进行开采:多元学习方法方法包括随机学习、精英学习和优值学习3种学习方法,为3种学习方法分别赋予选择概率,然后每一只引领蜂基于轮盘赌方法选择一种学习方式对相应蜜源进行开采;计算开采后的蜜源个体目标值,对开采前后的蜜源个体进行贪婪选择,留下目标值好的个体,并更新所有蜜源的未更新次数;
步骤S6,跟随蜂采用基于启发信息的变异机制对蜜源进行开采:每一只跟随蜂通过排序选择方法选择一个蜜源进行开采,并利用问题启发信息保留最优个体中契合度高的员工信息,同时根据当前蜜源个体的目标值优劣,选择不同的变异方式;对变异前后的蜜源进行贪婪选择,留下目标值好的个体,并更新开采后蜜源的未更新次数;
步骤S7,侦查蜂抛弃无用蜜源,随机产生新的蜜源替代旧蜜源:判断是否存在未更新次数超出最大未更新次数limit的蜜源;如果有多个,则选择未更新次数最大的蜜源,如果仍有多个选择,则随机选择其中一个蜜源,将该蜜源对应的引领蜂转变为侦查蜂,重新随机生成新的蜜源替代旧蜜源;
步骤S8,终止准则判断:
若达到最大迭代次数,则终止迭代,输出目标值最优的个体,该个体即为项目中每位员工在每项任务中投入的工作量分配结果,否则,转至步骤S5。
2.根据权利要求1所述基于启发式离散人工蜂群算法的软件项目调度方法,其特征在于:步骤S1中所述项目工期表示完成项目所有任务所花费的时间开销,它定义为:其中,tdur表示项目工期, 表示任务Tj的开始时间, 表示任务Tj的完成时间,且N表示任务个数;
步骤S1中所述项目成本表示完成项目所有任务所花费的财力,它定义为:条件1:
条件2:
其中,cost表示项目成本,t′表示项目处于开发阶段的某一个月,M表示员工个数,表示在t′期间付给员工Ei的薪酬, 表示Ei的正常月薪, 表示Ei的加班月薪,T_active_set(t′)表示在t′期间正在进行开发的任务集合;xij表示员工Ei在任务Tj中投入的工作量占全日制工作量的百分比; 表示员工Ei能够对整个项目投入的最大工作量占全日制工作量的百分比,当 时,表示能够加班;
步骤S1所述员工已有技能熟练度定义如下:
员工Ei的技能熟练度集合:
其中, 表示员工Ei的技能熟练度集合, 表示在tl时刻Ei对第k个技能的熟练度,k=1,2,.....,S,S为项目需要的技能总数; 表示Ei没有第k个技能, 表示Ei完全掌握第k个技能,C表示技能熟练度的最大值;tl为任务优先级图中各个紧前任务的完成时刻,l=0,1,2,...;将tl时刻所有可操作的任务构成当前可执行任务集合,该集合的开始时刻用tl表示;
在不同时刻具有不同取值,由 求出员工Ei在tl时刻对任务Tj的熟练程度:
且
其中, 表示员工Ei在tl时刻对任务Tj的熟练程度,reqj表示任务Tj所需求的技能的集合;skilli表示员工Ei所掌握的已有技能的集合;
步骤S1所述任务技能约束指参与某项任务的所有员工的技能总集合必须满足该任务的所有技能需求,且新技能只需一人学习,即:其中,reqj表示任务Tj所需求的技能的集合;skilli表示员工Ei所掌握的已有技能的集合;z表示新技能z,z(z∈{1,2,...,S})表示新技能z存在于项目所需技能集合中,z∈{1,
2,...,S},S表示项目所需技能数,q表示由第q个员工学习新技能;
步骤S1所述员工不能超负荷工作的约束指在任意t时刻,每个员工对当前可执行任务集合的总投入度不得超过该员工的最大投入度,即其中, 表示每个任务Tj占据每个员工Ei最大贡献度。
3.根据权利要求2所述基于启发式离散人工蜂群算法的软件项目调度方法,其特征在于:步骤S2中所述员工选择学习新技能的方法:员工Ei的每个已有技能k∈skilli都具有一定的初始熟练度 由此定义员工Ei的技能k与新技能z(z∈{1,2,...,S})之间的相似熟练度kz kz
其中,t0表示项目开始时间,r 为技能k与新技能z之间的关联程度,r ∈[0,1],员工Ei学习新技能z的合适度其中, 表示Eq的学习能力, 表示员工Ei已有技能与新技能z相似熟练度的最大值,表示是员工Ei在t0时刻对项目所有任务的总熟练程度,表示所有员工在t0时刻对项目所有任务的总熟练程度的最大
值, 表示所有员工在t0时刻对项目所有任务的总熟练程度的最小值, 选择合适度 最大的员工q学习新技能z,即
4.根据权利要求3所述基于启发式离散人工蜂群算法的软件项目调度方法,其特征在于:步骤S2中所述新技能熟练度增长曲线函数如下:其中, 表示员工Eq的新技能z的熟练度随时间t的增长函数,C表示技能熟练度的最大值,tanh(·)是双曲正切函数, 表示员工Eq对新技能z的熟练度增长率,z表示Eq的学习能力,该值越大表示Eq学习能力越强,SD 表示新技能z的难度,该值越大表示新技能z的难度越大,已有技能熟练度增长曲线函数如下:
其中, 表示员工Ei的已有技能k的熟练度随时间t的增长函数, 表示员工Ei对技能k的初始熟练度,即 表示员工Ei对技能k的熟练度增长率,
5.根据权利要求4所述基于启发式离散人工蜂群算法的软件项目调度方法,其特征在于:步骤S2中所述的员工投入度自适应变化函数如下:j∈T_active_set(t)
其中,dqj(t)表示t时刻经自适应调整后Eq对Tj的投入度,xqj表示项目调度方案中指定的员工Eq对任务Tj的投入度,T_active_set(t)表示t时刻可执行任务集合。
6.根据权利要求5所述基于启发式离散人工蜂群算法的软件项目调度方法,其特征在于:步骤S3中初始化启发式离散人工蜂群算法参数包括:设置启发式人工蜂群算法蜜源种群规模为SN、最大未更新次数limit、最大迭代次数G、随机学习选择概率Pr,设项目中有M名员工,N项任务,则变异概率Pm=1/(M·N),设迭代次数计数器t=0,每个蜜源的未更新次数counterp=0,p=1,2,...,SN。
7.根据权利要求6所述基于启发式离散人工蜂群算法的软件项目调度方法,其特征在于:步骤S5采用多元学习方法对所有蜜源个体进行开采的方法:步骤S51,根据输入的随机学习概率Pr,计算精英学习的概率Pe和优值学习的概率Ps,其中,步骤S52,每一只引领蜂通过轮盘赌方法选择学习方式的序号;
步骤S53,如果选择学习方式1,则引领蜂通过随机学习对相应蜜源个体进行开采;
步骤S54,如果选择学习方式2,则引领蜂通过精英学习对相应蜜源个体进行开采;
步骤S55,如果选择学习方式3,则引领蜂通过优值学习对相应蜜源个体进行开采;
步骤S56,输出开采后的新蜜源个体。
8.根据权利要求7所述基于启发式离散人工蜂群算法的软件项目调度方法,其特征在于:步骤S6中,跟随蜂采用基于启发信息的变异机制对蜜源进行开采的方法如下:步骤S61,计算每个员工对每个任务的契合度wfij,计算公式如下:其中,λ表示用于调整 的相对重要程度,η表示用于调整 的相对重要程度,γ用于调整 的相对重要程度, 表示在初始时刻员工Ei对任务Tj的熟练程度,i=1,2,...,Mj=1,2,...,N, 且表示Ei的正常月薪, 表示Ei的加班月薪;
步骤S62,对所有蜜源个体根据目标值由小到大进行排序,并记录每个蜜源的排序序号sortp∈[1,SN],p=1,2,...,SN,SN表示蜜源数;
步骤S63,跟随蜂通过排序选择方法,选择需要进行变异的蜜源,假设选择了第p个蜜源,记为YP=Pop(p),Pop表示蜜源种群,YP表示第p个蜜源的个体矩阵;
步骤S64,对每个任务Tj,均依据wfij进行轮盘赌选择,选出一个员工 将该员工的序号保留,即indexj=uj,indexj表示任务Tj所选员工索引,uj表示被选员工序号;
步骤S65,对蜜源YP的每一个元素生成一个随机数randomij,若randomij≤Pm,Pm表示变异概率,则该元素进行变异操作;
步骤S66,对满足变异条件的元素ypij进行变异,若i==indexj,则 表best示经搜索后的元素ypij的新值, 表示最优蜜源个体Y 中的元素;否则,若sortp<SN/2,即蜜源YP的目标值排序处于蜜源种群的前50%,则通过下式进行变异:条件4:ypij+N(0,1)·ypij≥0
否则,通过下式向最优蜜源个体靠拢:
其中,N(0,1)是标准高斯分布,rand∈[0,1],round(.)表示四舍五入取整, 表示决策变量yij的取值上限;min(.)是表示个体中的元素值不超过new new new
步骤S67,计算变异后的蜜源个体YP 的目标值,若YP 的目标值优于YP,即f(YP )
new best best new
步骤S68,变异个体目标值优于当前最优蜜源个体,即f(YP )
步骤S69,重复步骤S63‑S68,直至所有跟随蜂都完成采蜜操作,最后输出变异后的蜜源种群及其为更新次数。
9.根据权利要求8所述基于启发式离散人工蜂群算法的软件项目调度方法,其特征在于:步骤S7中,侦查蜂抛弃无用蜜源,随机产生新的蜜源替代旧蜜源的实现步骤如下:步骤S71,根据每个蜜源的当前未更新次数Counterp,p=1,2,...,SN,判断是否存在Counterp>limit,limit表示蜜源最大未更新次数;
步骤S72,若不存在Counterp>limit,则t=t+1,t表示迭代次数,跳转至S8;若存在Counterp>limit,则记录下该蜜源个体;
步骤S73,如果有多个未更新次数超过limit的蜜源,则选择未更新次数最大的蜜源,如果仍有多个选择,则随机选择其中一个蜜源,将该蜜源对应的引领蜂转变为侦查蜂;
步骤S74,转变后的侦查蜂随机搜寻新的蜜源,用新蜜源代替旧蜜源,令t=t+1。
10.根据权利要求9所述基于启发式离散人工蜂群算法的软件项目调度方法,其特征在于:所述解的粒度h为10,决策变量yij的取值上限