首页 / 专利库 / 诊断设备和程序 / 体积描记器 / 基于Q学习memetic算法的动态多目标软件项目调度方法

基于Q学习memetic算法的动态多目标软件项目调度方法

阅读:583发布:2021-09-01

专利汇可以提供基于Q学习memetic算法的动态多目标软件项目调度方法专利检索,专利查询,专利分析的服务。并且本 发明 提供的基于Q学习memetic 算法 的动态多目标 软件 项目调度方法,包括如下步骤:(1)读取输入信息;定义优化目标,设定约束条件;(2)初始化算法的参数;Q学习中的智能体 感知 项目环境中的初始状态;确定静态多目标memetic算法中的全局和局部搜索策略;(3)在项目初始时,产生初始调度方案,并产生一回报值;(4)在项目实施过程中,采用重调度方式;智能体感知项目环境的当前状态,依据回报值更新状态-动作对表中的Q值,基于选择机制确定动态memetic算法中的全局和局部搜索策略;基于动态memetic算法在新环境中产生新的调度方案,并产生一回报值。本发明能够学习项目环境的特征,快速高效地实现软件项目中的动态调度任务。,下面是基于Q学习memetic算法的动态多目标软件项目调度方法专利的具体信息内容。

1.一种基于Q学习memetic算法的动态多目标软件项目调度方法,其特征在于,包括以下步骤:
步骤(1)、读取项目初始时的输入信息,所述输入信息包括项目中各项任务的属性信息软件工程师的属性信息;定义优化目标,设定约束条件:软件工程师的属性信息包括每位软件工程师的学习能、学习动机、所掌握的技能、对从事各项技能的期望程度、能够在所述项目中投入的允许工作量、正常月薪、加班月薪;项目中各项任务的属性信息包括每项任务的工作量、技能要求、任务优先级图;优化目标包括项目工期、项目成本、抗险能力、稳定性和开发人员的满意度;约束条件包括任务技能约束和软件工程师不能超负荷工作的约束;
步骤(2)、初始化Q学习算法的参数:
将状态-动作对表中的所有Q值初始化为0;将项目初始时刻视为初始调度点t0;智能体感知项目环境的初始状态S(t0);随机选择一个动作A(t0);设置l=0,l为调度次数的计数器;
步骤(3)、主动调度:
在项目初始时刻t0,采用基于静态多目标memetic算法的主动调度方式生成一个预测方案;依据A(t0),确定静态多目标memetic算法的全局搜索和局部搜索算子;根据项目初始时刻任务和软件工程师的属性信息,基于静态多目标memetic算法,同时优化项目的以下目标:项目工期、项目成本、抗风险能力、以及开发人员的满意度,预先产生一组在多个目标间进行折中的Pareto非支配解,供项目管理者进行参考,并从中挑选出一个符合项目管理者偏好的解作为初始调度方案;计算求得的Pareto非支配解集的超体积指标HV值,HV值度量目标空间中受Pareto非支配解集支配部分的体积,并将HV值作为动作A(t0)的回报值r(t0);
步骤(4)、重调度:
如果一个紧急动态事件发生,则令l=l+1,记重调度点时刻为tl,执行以下步骤:
(4.1)、感知状态:
智能体感知项目环境的当前状态S(tl);
(4.2)、更新Q值:
依据下式更新状态-动作对表中的值Q(S(tl-1),A(tl-1)):
其中,NA为候选动作的个数;α是学习速率;γ是折现率,它表示将来回报对当前状态的影响,0≤α≤1,0≤γ≤1;
(4.3)、选择动作:
依据动作选择机制为当前状态S(tl)选择一个动作A(tl);
(4.4)、执行动作:
依据动作A(tl),确定动态多目标memetic算法的全局搜索算子和局部搜索算子;依据任务的当前属性信息和软件工程师的当前属性信息,基于动态多目标memetic算法,产生一组在项目的工期、成本、抗风险能力、稳定性及开发人员的满意度之间折中的新的Pareto非支配解,并由项目管理者从中挑选出一个符合项目管理者偏好的解作为新的调度方案;计算求得的Pareto非支配解集的超体积指标HV值,并将该HV值作为动作A(tl)的回报值r(tl);
步骤(5)、终止准则判断:
如果整个项目没有完成,则在当前项目中执行新生成的调度方案,并转至步骤(4);否则,结束整个流程。
2.根据权利要求1所述的基于Q学习memetic算法的动态多目标软件项目调度方法,其特征在于,步骤(1)中所述项目工期定义为下式(1)所示:
其中, 和 分别表示在调度时刻tl、l=0,1,2,…的调度方案中,任务Tj的开
始时间和完成时间;T_ava_set(tl)表示tl时刻所有能够进行调度的任务的集合;I表示初始景象,它将对不确定属性的估计值作为该属性的值计算项目工期;
步骤(1)所述的项目成本定义为下式(2)、(3)所示:
其中,t'表示项目处于开发阶段的某一个月,t'>tl; 表示在t'期间付给软件工
程师ei的薪酬;T_active_set(t')表示在t'期间正在进行开发的任务集合;xij(tl)表示在调度时刻tl、l=0,1,2,…的调度方案中,软件工程师ei在任务Tj中投入的工作量占全日制工作量的百分比; 表示ei能够对整个项目投入的允许工作量占全日制工作量的百分比, 表示ei能够加班工作; 和 分别表示ei的正常和加班月薪;e_ava_
set(tl)表示在tl时刻所有参与该项目的软件工程师的集合;
步骤(1)所述的抗风险能力定义为下式(4)所示:
抗风险能力采用基于景象的方法定义,将一个调度方案在不确定属性的多种采样值{θq|q=1,2,…,N}下进行仿真,以比较项目成本或工期的实际值与预估值之间的差值;其中,θq是不确定属性的第q个采样值,N是样本个数;durationq和costq分别是采样值θq下相应的项目工期和成本目标值;λ为权系数;
步骤(1)所述的稳定性在调度时刻tl、l=1,2,…时刻如下式(5)所示的定义:
其中,T_ava_set(tl-1)表示在tl-1、l=1,2,…时刻所有能够进行调度的任务集合;e_ava_set(tl-1)表示在tl-1时刻所有参与该项目的软件工程师的集合;xij(tl-1)表示在tl-1时刻的调度方案中,软件工程师ei在任务Tj中投入的工作量占全日制工作量的百分比;式(5)只针对在tl和tl-1时刻均需调度的任务进行计算,权值ωij设置如下式(6)所示:
如果在tl-1时刻的方案中,软件工程师ei未被分配到任务Tj中,而在tl时刻的新方案中,安排软件工程师ei去做Tj,则施加一个惩罚因子ωij=2;如果在tl-1时刻的方案中,软件工程师ei被分配到任务Tj中,但在tl时刻的新方案中,未安排软件工程师ei参加Tj,则施加一个惩罚因子ωij=1.5;如果在tl-1时刻的方案、在tl时刻的新方案中都安排软件工程师ei参加Tj,但工作量的投入不同,则施加一个惩罚因子ωij=1;
步骤(1)所述的开发人员的满意度定义为如下式(7)所示:
式(7)用于评价每个员工对所分配的任务和工作量的平均不期望程度;f5(tl)的值越小,员工对所生成的调度方案的满意度越高;其中, 衡量软件工程师ei对第k个技能的期望程度,reqj是任务Tj要求的技能集合,skilli是软件工程师ei掌握的技能集合,|reqj∩skilli|和|e_ava_set(tl)|分别是集合reqj∩skilli和e_ava_set(tl)中元素的个数;
步骤(1)所述的任务技能约束指参与一项任务的所有软件工程师必须具备该任务要求的所有技能,即如下式(8)所示
步骤(1)所述的软件工程师不能超负荷工作的约束指在任一时期t'≥tl,一个软件工程师为正在进行开发的任务同时投入的工作量之和 不超过他对整个项目投入的允许
工作量 即如下所示,

3.根据权利要求1所述的基于Q学习memetic算法的动态多目标软件项目调度方法,其特征在于,步骤(2)和步骤(4.1)中项目环境的状态S包括2个方面:
1)工作量比率fa1(tl):
工作量比率fa1(tl)定义为:tl时刻所有能够进行调度的任务的剩余工作量之和与从t0到tl这段时间内出现在项目中的所有任务的工作量总和的比率,如下式(9)所示:
其中,NI表示在项目初始时刻t0的任务数目;Nnew(tl)表示在(t0,tl]时间段内进入项目的新任务数目; 是完成整个任务Tj所需的估计工作量; 是在
tl时刻能够进行调度的任务Tj′的估计剩余工作量;
2)熟练度比率fa2(tl):
熟练度比率fa2(tl)定义为:tl时刻所有正在参与本项目的软件工程师在所有能够调度的任务上的熟练度之和与所有软件工程师在tl时刻能够进行调度的任务上的最高可能熟练度之和的比率,如下式(10)所示:
其中,M是所有参与本项目的软件工程师的数目, 是软件工程师ei在tl时刻对
任务Tj的熟练度, 其中,常数C=100, 是一个分值,
它衡量ei在tl时刻对技能k∈reqj∩skilli的掌握程度;
熟练度比率fa2(tl)的取值受tl时刻所有正在参与本项目的软件工程师的数目,以及他们各自对任务的熟练度影响;
共区分9种不同的状态:S1:0≤fa1(tl)≤0.4,0≤fa2(tl)≤0.6;S2:0≤fa1(tl)≤0.4,
0.60.82,…时刻项目所处的状态。
4.根据权利要求1所述的基于Q学习memetic算法的动态多目标软件项目调度方法,其特征在于,步骤(2)和步骤(4.3)中的动作A定义如下:
为多目标memetic算法确定一种特定的全局搜索算子和一种特定的局部搜索算子,称为一个动作A;采用两种全局搜索算子:1)基于遗传算法GA的全局搜索算子;2)基于相调制差分进化算法AMDE的全局搜索算子;为了与基于GA的全局搜索算子配合使用,采用两种局部搜索算子 和 为了与基于AMDE的全局搜索算子配合使用,采用两种局部搜索算子 和 将上述全局搜索算子和局部搜索算子组合,一共得到4种动作:A1:
A2: A3: A4:
在 中,对GA中每个个体对应的工作量分配矩阵X(tl)中的每个元素,从集合
中均匀随机挑选一个不同于该元素的值,以概率Pm替换该元素,取
Pm=1/(|T_ava_set(tl)|·|e_ava_set(tl)|),其中,|T_ava_set(tl)|和|e_ava_set(tl)|分别是集合T_ava_set(tl)和e_ava_set(tl)中元素的个数; 交换X(tl)中随机选取的两行或两列;在 和 中,分别以Pm'=1/4的概率,将多项式变异和均匀变异作用于AMDE中每个个体的每一元素上。
5.根据权利要求1所述的基于Q学习memetic算法的动态多目标软件项目调度方法,其特征在于,步骤(4.3)中的动作选择机制的实施方法如下:
(a)、由状态-动作对表中的Q值确定在状态S(tl)下,每个候选动作Ai、i=1,2,…,NA的选择概率P(S(tl),Ai)如下式(11)所示:
(b)、计算出每个候选动作Ai、i=1,2,…,NA的累积概率 如下式(12)所示:
(c)、在[0,1]区间内产生一个均匀分布的伪随机数r;
(d)、若 则选择动作A1作为状态S(tl)下的动作A(tl);否则,选择动作Ak,使得:
成立,将Ak作为当前状态S(tl)下的动作A(tl)。
6.根据权利要求1所述的基于Q学习memetic算法的动态多目标软件项目调度方法,其特征在于,步骤(4.4)中的在重调度点tl、l=1,2,…时刻,基于动态多目标memetic算法的反应式重调度方式的具体步骤如下:
a)群体初始化:根据tl、l=1,2,…时刻项目的当前状态,采用启发式策略构造初始群体P(tl);针对不确定属性,随机采样一组值δq,q=1,2,…,N;计算初始群体中每个个体的多目标值,即目标f1(tl)、f2(tl)、f3(tl)、f4(tl)、f5(tl),并进行约束处理;从初始群体中确定出所有的Pareto非支配解构成多样性外部存储器群体DA(tl);设置收敛性外部存储器CA(tl)为空集,目标评价次数计数器ct=|P(tl)|,|P(tl)|为初始群体P(tl)的规模;
b)个体繁殖:针对不确定属性,随机采样一组值φq,q=1,2,…,N;
b.1)全局搜索:将由动作A(tl)指定的全局搜索方法作用于CA(tl)和DA(tl),生成一个子代群体NPOP1(tl);计算NPOP1(tl)中每个个体的多目标值,令ct=ct+|NPOP1(tl)|,|NPOP1(tl)|为NPOP1(tl)的规模;
b.2)局部搜索:将由动作A(tl)指定的局部搜索方法作用于NPOP1(tl)中每个个体的邻域,搜索Lmax次,Lmax是局部搜索的最大迭代次数,得到一个新的子代群体NPOP(tl);令ct=ct+Lmax·|NPOP1(tl)|  (13);
c)更新CA(tl):求出CA(tl)∪NPOP(tl)中具有不重复目标向量的个体,将它们设为CA(tl);如果|CA(tl)|>nCA,|CA(tl)|是CA(tl)的当前规模,nCA是预先设定的CA(tl)的最大规模,则依据基于Iε+指标的适应度值将多余的解从CA(tl)中依次移除;
Iε+指标描述在目标空间中,一个个体x1为了支配另外一个解x2所需的最短距离,如下式(14)所示:
Iε+(x1,x2)=minε(norm_fi(x1)-ε≤norm_fi(x2),1≤i≤m) (14)
其中,m是目标的个数,为了将各个目标上的度量单位统一,分别取目标值fi(x1)、fi(x2)经归一化后的值norm_fi(x1)、norm_fi(x2),即如下式(15)、(16)所示:
求取每个个体x1∈CA(tl)的适应度F(x1)如下式(17)所示:
个体x1的适应度F(x1)越大,说明该个体越优;
如果|CA(tl)|>nCA,则依据基于Iε+指标的适应度值将多余的解从CA(tl)中移除,具体步骤如下:
ⅰ)求出CA(tl)中具有最小适应度F(x*)的个体x*;
ⅱ)将x*从CA(tl)中移除;
ⅲ)更新CA(tl)中剩余个体的适应度:
ⅳ)如果|CA(tl)|>nCA,转至步骤ⅰ);否则,结束,输出更新后的规模为nCA的收敛性外部存储器CA(tl);
d)更新DA(tl):求出NPOP(tl)∪DA(tl)中所有的Pareto非支配解,将它们设置为DA(tl);
如果|DA(tl)|>nDA,|DA(tl)|是DA(tl)的当前规模,nDA是预先设定的DA(tl)的最大规模,则设置AD(tl)为空集合,依据Lp范数距离迭代地从DA(tl)中选择nDA个合适的解,并将它们依次加入集合AD(tl)中;设置DA(tl)=AD(tl);两个个体x3和x4在目标空间上的Lp范数距离按下式求取如下式(18)所示:
其中,norm_fi(x3)和norm_fi(x4)分别是fi(x3)、fi(x4)的归一化值,p取 如果|DA(tl)|>nDA,则依据Lp范数距离迭代地从DA(tl)中选择nDA个合适的解的具体步骤如下:
Ⅰ)设置AD(tl)为空集合;
Ⅱ)从DA(tl)中确定出所有在各个目标上,具有最大或最小目标值的不重复个体,把它们从DA(tl)移出,加入AD(tl);
Ⅲ)对DA(tl)中的每个个体,求它到AD(tl)中所有个体的最短Lp范数距离;确定出DA(tl)中最短Lp范数距离最大的个体,并将该个体从DA(tl)移出,加入AD(tl);
Ⅳ)如果|AD(tl)|e)终止准则判断:如果ct<最大目标评价次数,则转至步骤b);否则,算法终止,把多样性外部存储器群体DA(tl)作为Pareto非支配调度方案解集输出。
7.根据权利要求6所述的基于Q学习memetic算法的动态多目标软件项目调度方法,其特征在于,步骤(3)中的在项目初始时刻t0,基于静态多目标memetic算法的主动调度方式的具体步骤,与基于动态多目标memetic算法的反应式重调度方式的步骤相同,不同点在于:在基于静态多目标memetic算法的主动调度方式的步骤a)中,初始群体随机产生,而不是由启发式策略产生;基于静态多目标memetic算法的主动调度方式在计算每个个体的目标值时,只需计算四个目标值f1(tl)、f2(tl)、f3(tl)、f5(tl),即在项目初始时刻t0不需计算稳定性目标f4(tl)。

说明书全文

基于Q学习memetic算法的动态多目标软件项目调度方法

技术领域

[0001] 本发明涉及软件项目调度技术领域,尤其涉及一种基于Q学习memetic算法的动态多目标软件项目调度方法。

背景技术

[0002] 软件项目调度是指项目管理者根据预估的任务工作量,确定任务依次开发的顺序,并进行人资源的分配,以在满足任务优先级、任务技能约束、软件工程师不能超负荷工作等约束条件的前提下,优化软件项目的性能指标。软件项目调度是一个多目标优化的问题,因为项目中存在着成本、工期、软件工程师满意度等多个需要同时考虑的优化目标。
[0003] 在一些新兴的软件开发领域,如计算、移动通讯、互联网等,项目的规模往往很大,需要上百名软件开发人员协作完成数百项任务。随着搜索空间的激增,软件项目调度问题变得非常复杂和具有挑战性。如果单纯依靠软件项目管理者人工手动调度,不仅耗时长,给管理者带来很大的精神负担,而且性能低下。此外,实际项目的开发环境是动态不确定的,在项目的生命周期中,存在着需求变更、人力资源变动、任务工作量调整等多种动态因素。当面临这些扰动时,根据初始数据产生的最优调度方案的性能可能大大降低。因此亟需研究一种能够处理动态不确定因素和复杂大规模问题的新型项目调度方法。
[0004] Memetic算法是Moscato在1989年首次提出的一种元启发式方法。它模拟文化进化过程,用局部启发式搜索来模拟由大量专业知识支撑的变异过程。文化基因算法将基于种群的全局搜索和基于个体的局部启发式搜索相结合,该机制使得它的搜索效率在某些问题领域中比传统进化算法提高几个数量级,可广泛应用于各类优化问题中。然而,软件项目调度问题所处环境是动态变化的。在不同的环境状态下,文化基因算法采用不同的全局和局部启发式搜索算子将使算法表现出相异的搜索性能。因此,如果能够由算法自主确定当前条件下搜索效果最佳的进化算子,将大大提高文化基因算法在求解大规模软件项目调度问题时的求解效率。
[0005] 强化学习是一种通过智能体与动态环境的试错交互,学习最优行为的有效方法。智能体能够感知环境,选择在当前状态下执行的动作,环境会反馈一个奖赏信号。通过交互过程,智能体学习得到能够使得累积奖赏值最大的行为决策机制,这也使得强化学习的学习策略具有长期效应。Q-学习(Q-learning)是一种著名的强化学习算法,它的目标是通过智能体学习得到最优行为选择机制,即表征每对状态-行为的最优长期累积奖赏值。
[0006] 目前已有的项目调度方法存在以下不足:
[0007] 1)大多仅考虑了静态的开发环境,它们假设项目中的所有信息都是预先可知且确定不变的,显然,当实际项目的开发环境发生动态变化或存在不确定因素时,依据静态方法产生的调度方案不再适用。
[0008] 2)对多个优化目标的处理方式比较单一。大多已有方法采用加权求和法将多个目标转换为一个目标,这种方法将会引入较多的参数,并且需要事先对各个目标进行归一化处理。由于项目的多个目标之间往往是相互矛盾的,因此更好的方式是采用多目标进化算法,例如多目标memetic算法,对多个目标并行处理,从而为项目管理者提供一组反映目标间不同折中程度的调度方案,为其做出最终的决策提供参考。
[0009] 3)求解大规模软件项目调度问题的性能低下。当面临任务繁多、开发人员数量大的大规模软件项目调度问题时,由于搜索空间巨大,而现有调度方法又缺乏自主学习并有效利用问题特征的搜索引导机制,仅仅依靠固定的搜索算子寻优,因此,存在着收敛速度慢、早熟、局部搜索能力弱等问题,难以有效地获取最佳调度解。

发明内容

[0010] 本发明提供一种基于Q学习memetic算法的动态多目标软件项目调度方法,用以在现实世界具有动态不确定特征的大规模软件项目开发环境中,动态捕捉当前环境的特征,自适应地学习适当的全局和局部搜索算子,同时处理紧急动态事件和不确定性属性等动态因素,实现软件工程师在各项任务中的有效分配。
[0011] 为了解决上述问题,本发明提供了一种基于Q学习memetic算法的动态多目标软件项目调度方法,包括以下步骤:
[0012] 步骤(1)、读取项目初始时的输入信息,所述输入信息包括项目中各项任务的属性信息和软件工程师的属性信息;定义优化目标,设定约束条件:
[0013] 软件工程师的属性信息包括每位软件工程师的学习能力、学习动机、所掌握的技能、对从事各项技能的期望程度、能够在本项目中投入的允许工作量、正常月薪、加班月薪;项目中各项任务的属性信息包括每项任务的工作量、技能要求、任务优先级图;优化目标包括项目工期、项目成本、抗险能力、稳定性和开发人员的满意度;约束条件包括任务技能约束和软件工程师不能超负荷工作的约束;
[0014] 步骤(2)、初始化Q学习算法的参数:
[0015] 将状态-动作对表中的所有Q值初始化为0;将项目初始时刻视为初始调度点t0;智能体感知项目环境的初始状态S(t0);随机选择一个动作A(t0);设置l=0,l为调度次数的计数器;
[0016] 步骤(3)、主动调度:
[0017] 在项目初始时刻t0,采用基于静态多目标memetic算法的主动调度方式生成一个预测方案;依据A(t0),确定静态多目标memetic算法的全局搜索和局部搜索算子;根据项目初始时刻任务的属性信息和软件工程师的属性信息,基于静态多目标memetic算法,同时优化项目的以下目标:项目工期、项目成本、抗风险能力、以及开发人员的满意度,预先产生一组在多个目标间进行折中的Pareto非支配解,供项目管理者进行参考,并从中挑选出一个符合项目管理者偏好的解作为初始调度方案;计算求得的Pareto非支配解集的超体积指标HV值,HV值度量目标空间中受Pareto非支配解集支配部分的体积,并将HV值作为动作A(t0)的回报值r(t0);
[0018] 步骤(4)、重调度:
[0019] 如果一个紧急动态事件发生,则令l=l+1,记重调度点时刻为tl,执行以下步骤:
[0020] (4.1)、感知状态:
[0021] 智能体感知项目环境的当前状态S(tl);
[0022] (4.2)、更新Q值:
[0023] 依据下式更新状态-动作对表中的值Q(S(tl-1),A(tl-1)):
[0024]
[0025] 其中,NA为候选动作的个数;α是学习速率;γ是折现率,它表示将来回[0026] 报对当前状态的影响,0≤α≤1,0≤γ≤1;
[0027] (4.3)、选择动作:
[0028] 依据动作选择机制为当前状态S(tl)选择一个动作A(tl);
[0029] (4.4)、执行动作:
[0030] 依据A(tl),确定动态多目标memetic算法的全局搜索和局部搜索算子;依[0031] 据任务和软件工程师的当前属性,基于动态多目标memetic算法,产生一
[0032] 组在项目的工期、成本、抗风险能力、稳定性及开发人员的满意度之间折[0033] 中的新的Pareto非支配解,并由项目管理者从中挑选出一个符合项目管理[0034] 者偏好的解作为新的调度方案;计算求得的Pareto非支配解集的超体积指[0035] 标HV值,并将该HV值作为动作A(tl)的回报值r(tl);
[0036] 步骤(5)、终止准则判断:
[0037] 如果整个项目没有完成,则在当前项目中执行新生成的调度方案,并转至步骤(4);否则,结束整个流程。
[0038] 优选的,步骤(1)中所述项目工期定义为下式(1)所示:
[0039]
[0040] 其中, 和 分别表示在调度时刻tl、l=0,1,2,…的调度方案中,任务Tj的开始时间和完成时间;T_ava_set(tl)表示tl时刻所有能够进行调度的任务的集合;I表示初始景象,它将对不确定属性的估计值作为该属性的值计算项目工期;
[0041] 步骤(1)所述的项目成本定义为下式(2)、(3)所示:
[0042]
[0043]
[0044] 其中,t'表示项目处于开发阶段的某一个月,t'>tl; 表示在t'期间付给软件工程师ei的薪酬;T_active_set(t')表示在t'期间正在进行开发的任务集合;xij(tl)表示在调度时刻tl、l=0,1,2,…的调度方案中,软件工程师ei在任务Tj中投入的工作量占全日制工作量的百分比; 表示ei能够对整个项目投入的允许工作量占全日制工作量的百分比, 表示ei能够加班工作; 和 分别表示ei的正常和加班月薪;e_ava_set(tl)表示在tl时刻所有参与该项目的软件工程师的集合;
[0045] 步骤(1)所述的抗风险能力定义为下式(4)所示:
[0046]
[0047] 抗风险能力采用基于景象的方法定义,将一个调度方案在不确定属性的多种采样值{θq|q=1,2,…,N}下进行仿真,以比较项目成本或工期的实际值与预估值之间的差值;其中,θq是不确定属性的第q个采样值,N是样本个数;durationq和costq分别是采样值θq下相应的项目工期和成本目标值;λ为权系数;
[0048] 步骤(1)所述的稳定性在调度时刻tl、l=1,2,…时刻如下式(5)所示的定义:
[0049]
[0050] 其中,T_ava_set(tl-1)表示在tl-1、l=1,2,…时刻所有能够进行调度的任务集合;e_ava_set(tl-1)表示在tl-1时刻所有参与该项目的软件工程师的集合;
[0051] xij(tl-1)表示在tl-1时刻的调度方案中,软件工程师ei在任务Tj中投入的工作量占全日制工作量的百分比;式(5)只针对在tl和tl-1时刻均需调度的任务进行计算,权值ωij设置如下式(6)所示:
[0052]
[0053] 如果在tl-1时刻的方案中,软件工程师ei未被分配到任务Tj中,而在tl时刻的新方案中,安排软件工程师ei去做Tj,则施加一个惩罚因子ωij=2;如果在tl-1时刻的方案中,软件工程师ei被分配到任务Tj中,但在tl时刻的新方案中,未安排软件工程师ei参加Tj,则施加一个惩罚因子ωij=1.5;如果在tl-1时刻的方案、在tl时刻的新方案中都安排软件工程师ei参加Tj,但工作量的投入不同,则施加一个惩罚因子ωij=1;
[0054] 步骤(1)所述的开发人员的满意度定义为如下式(7)所示:
[0055]
[0056] 式(7)用于评价每个员工对所分配的任务和工作量的平均不期望程度;f5(tl)的值越小,员工对所生成的调度方案的满意度越高;其中, 衡量软件工程师ei对第k个技能的期望程度,reqj是任务Tj要求的技能集合,skilli是软件工程师ei掌握的技能集合,|reqj∩skilli|和|e_ava_set(tl)|分别是集合reqj∩skilli和e_ava_set(tl)中元素的个数;
[0057] 步骤(1)所述的任务技能约束指参与一项任务的所有软件工程师必须具备该任务要求的所有技能,即如下式(8)所示
[0058]
[0059] 步骤(1)所述的软件工程师不能超负荷工作的约束指在任一时期t'≥tl,一个软件工程师为正在进行开发的任务同时投入的工作量之和 不超过他对整个项目投入的允许工作量 即如下所示,
[0060] 且
[0061] 优选的,步骤(2)和步骤(4.1)中项目环境的状态S包括2个方面:
[0062] 1)工作量比率fa1(tl):
[0063] 工作量比率fa1(tl)定义为:tl时刻所有能够进行调度的任务的剩余工作量之和与从t0到tl这段时间内出现在项目中的所有任务的工作量总和的比率,如下式(9)所示:
[0064]
[0065] 其中,NI表示在项目初始时刻t0的任务数目;Nnew(tl)表示在(t0,tl]时间段内进入项目的新任务数目;Tjest_tot_eff是完成整个任务Tj所需的估计工作量; 是在tl时刻能够进行调度的任务Tj′的估计剩余工作量;
[0066] 2)熟练度比率fa2(tl):
[0067] 熟练度比率fa2(tl)定义为:tl时刻所有正在参与本项目的软件工程师在所有能够调度的任务上的熟练度之和与所有软件工程师在tl时刻能够进行调度的任务上的最高可能熟练度之和的比率,如下式(10)所示:
[0068]
[0069] 其中,M是所有参与本项目的软件工程师的数目, 是软件工程师ei在tl时刻对任务Tj的熟练度, 其中,常数C=100, 是一个分值,它衡量ei在tl时刻对技能k∈reqj∩skilli的掌握程度;熟练度比率fa2(tl)的取值受tl时刻所有正在参与本项目的软件工程师的数目,以及他们各自对任务的熟练度影响;
[0070] 共区分9种不同的状态:S1:0≤fa1(tl)≤0.4,0≤fa2(tl)≤0.6;S2:0≤fa1(tl)≤0.4,0.61;S7:0.81,2,…时刻项目所处的状态。
[0071] 优选的,步骤(2)和步骤(4.3)中的动作A定义如下:
[0072] 为多目标memetic算法确定一种特定的全局搜索算子和一种特定的局部搜索算子,称为一个动作A;采用两种全局搜索算子:1)基于遗传算法GA的全局搜索算子;2)基于相调制差分进化算法AMDE的全局搜索算子;为了与基于GA的全局搜索算子配合使用,采用两种局部搜索算子 和 为了与基于AMDE的全局搜索算子配合使用,采用两种局部搜索算子 和 将上述全局搜索算子和局部搜索算子组合,一共得到4种动作:A1:A2: A3: A4:
[0073] 在 中,对GA中每个个体对应的工作量分配矩阵X(tl)中的每个元素,从集合中均匀随机挑选一个不同于该元素的值,以概率Pm替换该元素,取Pm=1/(|T_ava_set(tl)|·|e_ava_set(tl)|),其中,|T_ava_set(tl)|和|e_ava_set(tl)|分别是集合T_ava_set(tl)和e_ava_set(tl)中元素的个数; 交换X(tl)中随机选取的两行或两列;在 和 中,分别以P′m=1/4的概率,将多项式变异和均匀变异作用于AMDE中每个个体的每一元素上。
[0074] 优选的,步骤(4.3)中的动作选择机制的实施方法如下:
[0075] (a)、由状态-动作对表中的Q值确定在状态S(tl)下,每个候选动作Ai,i=1,2,…,NA的选择概率P(S(tl),Ai)如下式(11)所示:
[0076]
[0077] (b)、计算出每个候选动作Ai,i=1,2,…,NA的累积概率 如下式(12)所示:
[0078]
[0079] (c)、在[0,1]区间内产生一个均匀分布的伪随机数r;
[0080] (d)、若 则选择动作A1作为状态S(tl)下的动作A(tl);否则,选择动作Ak,使得: 成立,将Ak作为当前状态S(tl)下的动作A(tl)。
[0081] 优选的,步骤(4.4)中的在重调度点tl、l=1,2,…时刻,基于动态多目标memetic算法的反应式重调度方式的具体步骤如下:
[0082] a)群体初始化:根据tl、l=1,2,…时刻项目的当前状态,采用启发式策略构造初始群体P(tl);针对不确定属性,随机采样一组值δq,q=1,2,…,N;计算初始群体中每个个体的多目标值,即目标f1(tl)、f2(tl)、f3(tl)、f4(tl)、f5(tl),并进行约束处理;从初始群体中确定出所有的Pareto非支配解构成多样性外部存储器群体DA(tl);设置收敛性外部存储器CA(tl)为空集,目标评价次数计数器ct=|P(tl)|,|P(tl)|为初始群体P(tl)的规模;
[0083] b)个体繁殖:针对不确定属性,随机采样一组值φq,q=1,2,…,N;
[0084] b.1)全局搜索:将由动作A(tl)指定的全局搜索方法作用于CA(tl)和DA(tl),生成一个子代群体NPOP1(tl);计算NPOP1(tl)中每个个体的多目标值,令ct=ct+|NPOP1(tl)|,|NPOP1(tl)|为NPOP1(tl)的规模;
[0085] b.2)局部搜索:将由动作A(tl)指定的局部搜索方法作用于NPOP1(tl)中每个个体的邻域,搜索Lmax次,Lmax是局部搜索的最大迭代次数,得到一个新的子代群体NPOP(tl);令[0086] ct=ct+Lmax·|NPOP1(tl)|   (13);
[0087] c)更新CA(tl):求出CA(tl)∪NPOP(tl)中具有不重复目标向量的个体,将它们设为CA(tl);如果|CA(tl)|>nCA,|CA(tl)|是CA(tl)的当前规模,nCA是预先设定的CA(tl)的最大规模,则依据基于Iε+指标的适应度值将多余的解从CA(tl)中依次移除;Iε+指标描述在目标空间中,一个个体x1为了支配另外一个解x2所需的最短距离,如下式(14)所示:
[0088] Iε+(x1,x2)=minε(norm_fi(x1)-ε≤norm_fi(x2),1≤i≤m)   (14)
[0089] 其中,m是目标的个数,为了将各个目标上的度量单位统一,分别取目标值fi(x1)、fi(x2)经归一化后的值norm_fi(x1)、norm_fi(x2),即如下式(15)、(16)所示:
[0090]
[0091]
[0092] 求取每个个体x1∈CA(tl)的适应度F(x1)如下式(17)所示:
[0093]
[0094] 个体x1的适应度F(x1)越大,说明该个体越优;
[0095] 如果|CA(tl)|>nCA,则依据基于Iε+指标的适应度值将多余的解从CA(tl)中移除,具体步骤如下:
[0096] ⅰ)求出CA(tl)中具有最小适应度F(x*)的个体x*;
[0097] ⅱ)将x*从CA(tl)中移除;
[0098] ⅲ)更新CA(tl)中剩余个体的适应度:
[0099] ⅳ)如果|CA(tl)|>nCA,转至步骤ⅰ);否则,结束,输出更新后的规模为nCA的收敛性外部存储器CA(tl);
[0100] d)更新DA(tl):求出NPOP(tl)∪DA(tl)中所有的Pareto非支配解,将它们设置为DA(tl);如果|DA(tl)|>nDA,|DA(tl)|是DA(tl)的当前规模,nDA是预先设定的DA(tl)的最大规模,则设置AD(tl)为空集合,依据Lp范数距离迭代地从DA(tl)中选择nDA个合适的解,并将它们依次加入集合AD(tl)中;设置DA(tl)=AD(tl);
[0101] 两个个体x3和x4在目标空间上的Lp范数距离按下式求取如下式(18)所示:
[0102]
[0103] 其中,norm_fi(x3)和norm_fi(x4)分别是fi(x3)、fi(x4)的归一化值,p取 如果|DA(tl)|>nDA,则依据Lp范数距离迭代地从DA(tl)中选择nDA个合适的解的具体步骤如下:
[0104] Ⅰ)设置AD(tl)为空集合;
[0105] Ⅱ)从DA(tl)中确定出所有在各个目标上,具有最大或最小目标值的不重复个体,把它们从DA(tl)移出,加入AD(tl);
[0106] Ⅲ)对DA(tl)中的每个个体,求它到AD(tl)中所有个体的最短Lp范数距离;确定出DA(tl)中最短Lp范数距离最大的个体,并将该个体从DA(tl)移出,加入AD(tl);
[0107] Ⅳ)如果|AD(tl)|
[0108] e)终止准则判断:如果ct<最大目标评价次数,则转至步骤b);否则,算法终止,把多样性外部存储器群体DA(tl)作为Pareto非支配调度方案解集输出。
[0109] 优选的,步骤(3)中的在项目初始时刻t0,基于静态多目标memetic算法的主动调度方式的具体步骤,与基于动态多目标memetic算法的反应式重调度方式的步骤相同,不同点在于:在基于静态多目标memetic算法的主动调度方式的步骤a)中,初始群体随机产生,而不是由启发式策略产生;基于静态多目标memetic算法的主动调度方式在计算每个个体的目标值时,只需计算四个目标值f1(tl)、f2(tl)、f3(tl)、f5(tl),即在项目初始时刻t0不需计算稳定性目标f4(tl)。
[0110] 本发明提供的基于Q学习memetic算法的动态多目标软件项目调度方法与现有技术相比,具有以下技术效果:
[0111] 1)本发明能够同时处理实际项目开发环境中存在的紧急动态事件和不确定性属性,使得产生的调度方案具有较强的抗风险能力,并能在动态变化的环境中,自适应地对原有调度方案做出适当的调整。因此,与现有技术相比,本发明更适合处理现实世界中的动态项目调度问题;
[0112] 2)本发明同时优化了项目的效率指标(工期、成本)、抗风险能力、稳定性以及开发人员的满意度,并采用Q学习多目标memetic算法对多个目标并行处理,从而能够为项目管理者提供一组反映目标间不同折中程度的调度方案,为其做出最终的决策提供有力的参考;
[0113] 3)本发明针对大规模软件项目调度问题搜索空间庞大、存在大量动态不确定因素、约束条件多的特点,给出了利用Q-学习机制,在多目标memetic算法中自主确定当前搜索效果最佳的搜索算子的方法,并利用问题的先验知识设计启发式动态优化策略,以在动态变化的环境中,高效地搜索到一系列随时间不断变化的、具有代表性的可行Pareto非支配解集,这些解集具有较好的收敛性能及分布多样性;本发明提出的动态调度技术对实际软件项目的成功实施具有重要意义。附图说明
[0114] 图1为本发明具体实施方式的基于Q学习memetic算法的动态多目标软件项目调度方法中求解一具体实例的任务优先级图;
[0115] 图2为本发明具体实施方式的基于Q学习memetic算法的动态多目标软件项目调度方法的流程图
[0116] 图3为本发明具体实施方式的基于Q学习memetic算法的动态多目标软件项目调度方法中基于遗传算法GA的全局搜索算子中,个体的表示方法和其对应的分配矩阵示例图。

具体实施方式

[0117] 下面结合附图对本发明提供的基于Q学习memetic算法的动态多目标软件项目调度方法的具体实施方式做详细说明。
[0118] 本具体实施方式提供了一种基于Q学习memetic算法的动态多目标软件项目调度方法,图1为本发明具体实施方式的基于Q学习memetic算法的动态多目标软件项目调度方法中求解的一具体实例任务优先级图,图2为本发明具体实施方式的基于Q学习memetic算法的动态多目标软件项目调度方法的流程图,图3为本发明具体实施方式的基于Q学习memetic算法的动态多目标软件项目调度方法中基于遗传算法GA的全局搜索算子中,个体的表示方法和其对应的分配矩阵示例图。
[0119] 为了便于理解本具体实施方式的方法,以下结合一实例对其本具体实施方式提出的基于Q学习memetic算法的动态多目标软件项目调度方法进行说明。
[0120] 一个实际项目中,有10个软件工程师和12个任务,共有5个技能要求(设为1、2、3、4、5)。任务优先级图如图1所示。每项任务Tj要求的工作量具有不确定性,其初始估计工作量 及技能要求集合reqj如表1所示。每个软件工程师ei对整个项目投入的最大允许工作量 正常月薪 加班月薪 以及所掌握的技能集合skilli如表2所示。
在项目开始后,有一系列的紧急动态事件陆续发生,例如,在t2=1.14个月时,软件工程师e6突然请假离开;在t2=1.25个月时,软件工程师e6回到项目中;在t3=3.19个月时,新的紧急任务T13下达等。
[0121] 表1项目中各项任务的属性信息
[0122]
[0123] 表2软件工程师的属性信息
[0124]
[0125] 使用本发明提出的基于Q学习memetic算法的动态多目标软件项目调度方法求解该项目实施例的调度方案,如图2所示,本具体实施方式提供的基于Q学习memetic算法的动态多目标软件项目调度方法具体步骤如下:
[0126] (1)、初始化。读取项目初始时的输入信息,所述输入信息包括项目中各任务的属性信息(见表1)和软件工程师的属性信息(见表2);给出优化目标的定义,并设定约束条件。由于开发环境是动态变化的,将项目初始时刻视为初始调度点t0,将紧急动态事件,即对项目的进行产生重要影响或需要立刻处理的事件,例如软件工程师请假、软件工程师回归、新的紧急任务下达的发生时刻视为重调度点tl,l=1,2,…,l为调度次数的计数器。
[0127] 在tl,l=1,2,…,时刻所处的项目开发环境下,项目工期定义为完成当前所有任务剩余的工作量所花费的时间开销:
[0128]
[0129] 在式(1)中, 和 分别表示在调度时刻tl的调度方案中,任务Tj的开始时间和完成时间;T_ava_set(tl)表示tl时刻所有可进行调度的任务的集合;I表示初始景象,它将对不确定属性的估计值,例如实施例中对任务工作量的估计值,作为该属性的值计算项目工期;
[0130] 在tl,l=1,2,…,时刻所处的项目开发环境下,项目成本定义为完成当前所有任务剩余的工作量所花费的财力,按下式(2)、(3)计算:
[0131]
[0132]
[0133] 其中,t'表示项目处于开发阶段的某一个月,t'>tl; 表示在t'期间付给软件工程师ei的薪酬;T_active_set(t')表示在t'期间正在进行开发的任务集合;xij(tl)表示在调度时刻tl的调度方案中,ei在任务Tj中投入的工作量占全日制工作量的百分比;表示ei能够对整个项目投入的允许工作量占全日制工作量的百分比, 表示ei能够加班工作; 和 分别表示ei的正常和加班月薪;e_ava_set(tl)表示在tl时刻所
有参与该项目的软件工程师的集合;
[0134] 在tl,l=1,2,…,时刻所处的项目开发环境下,抗风险能力的定义采用基于景象的方法,将一个调度方案在不确定属性(例如实施例中的任务工作量)的多种采样值{θq|q=1,2,…,N}下进行仿真,以比较项目成本或工期的实际值与预估值之间的差值。
[0135]
[0136] 其中,θq是不确定属性的第q个采样值,N是样本个数,在本发明中,设置N=30。durationq和costq分别是采样值θq下相应的项目工期和成本目标值。λ为权系数,在本发明中,令λ=1。
[0137] 稳定性仅在tl,l=1,2,…有定义,本发明将其定义为软件工程师在新旧方案各个任务中投入的工作量的差别,按下式(5)计算:
[0138]
[0139] 其中,T_ava_set(tl-1)表示在tl-1、l=1,2,…时刻所有能够进行调度的任务集合;e_ava_set(tl-1)表示在tl-1时刻所有参与该项目的软件工程师的集合;xij(tl-1)表示在tl-1时刻的调度方案中,软件工程师ei在任务Tj中投入的工作量占全日制工作量的百分比;稳定性的公式只针对在tl和tl-1时刻均需调度的任务进行计算,它的目的是防止软件工程师在新旧方案中的工作安排差别过大。权值ωij设置如下式(6)所示:
[0140]
[0141] 如果在tl-1时刻的方案中,软件工程师ei未被分配到任务Tj中,而在tl时刻的新方案中,安排ei去做Tj,则施加一个较大的惩罚因子ωij=2;如果在原方案中,ei被分配到任务Tj中,但在新方案中,未安排ei参加Tj,则施加一个中等的惩罚因子ωij=1.5;如果新旧方案都安排ei参加Tj,但工作量的投入不同,则施加一个小的惩罚因子ωij=1。
[0142] 在tl、l=1,2,…时刻所处的项目开发环境下,开发人员的满意度评价每个员工对所分配任务和工作量的平均不期望程度,定义为下式(7)所示:
[0143]
[0144] f5(tl)的值越小,员工对所生成的调度方案的满意度越高;其中, 衡量软件工程师ei对第k个技能的期望程度,reqj是任务Tj要求的技能集合,skilli是ei掌握的技能集合,|reqj∩skilli|和|e_ava_set(tl)|分别是集合reqj∩skilli和e_ava_set(tl)中元素的个数;
[0145] 本发明设定的约束条件包括任务技能约束和软件工程师不能超负荷工作的约束。
[0146] 在tl,l=1,2,…,时刻所处的项目开发环境下,任务技能约束指参与某项任务的所有软件工程师必须具备该任务要求的所有技能,即
[0147]
[0148] 其中,reqj表示任务Tj所需求的技能的集合,skilli表示软件工程师ei所掌握的所有技能的集合。
[0149] 软件工程师不能超负荷工作的约束指在任一时刻t'≥tl,一个软件工程师为正在进行开发的任务同时投入的工作量之和 不超过他对整个项目投入的允许工作量即,
[0150] 且
[0151] (2)、初始化Q学习算法的参数:
[0152] 将状态-动作对表中的所有Q值初始化为0;将项目初始时刻视为初始调度点t0;智能体感知项目环境的初始状态S(t0);随机选择一个动作A(t0);设置l=0;
[0153] 动作A定义如下:为多目标memetic算法确定一种特定的全局搜索算子和一种特定的局部搜索算子,称为一个动作A;采用两种全局搜索算子:1)基于遗传算法GA的全局搜索算子;2)基于相角调制差分进化算法AMDE的全局搜索算子;为了与基于GA的全局搜索算子配合使用,采用两种局部搜索算子 和 为了与基于AMDE的全局搜索算子配合使用,采用两种局部搜索算子 和 将上述全局搜索算子和局部搜索算子组合,一共得到4种动作:A1: A2: A3: A4:
[0154] (3)、主动调度:
[0155] 在项目初始时刻t0,采用基于静态多目标memetic算法的主动调度方式生成一个预测方案;依据A(t0),确定静态多目标memetic算法的全局搜索和局部搜索算子;根据项目初始时刻任务和软件工程师的属性,基于静态多目标memetic算法,同时优化项目的以下目标:项目工期、成本、抗风险能力、以及开发人员的满意度,预先产生一组在多个目标间进行折中的Pareto非支配解,供项目管理者进行参考,并从中挑选出一个符合项目管理者偏好的解作为初始调度方案;计算求得的Pareto非支配解集的超体积指标HV值,HV值度量目标空间中受Pareto非支配解集支配部分的体积,并将HV值作为动作A(t0)的回报值r(t0);
[0156] (4)、重调度:
[0157] 如果一个紧急动态事件发生,则令l=l+1,记重调度点时刻为tl,执行以下步骤:
[0158] (4.1)、感知状态:
[0159] 智能体感知项目环境的当前状态S(tl);
[0160] 本发明项目环境的状态S(tl)包括2个方面:
[0161] 1)工作量比率fa1(tl):
[0162] 工作量比率fa1(tl)定义为:tl时刻所有可进行调度的任务的剩余工作量之和,与从t0到tl这段时间内曾经出现在项目中的所有任务的工作量总和的比率:
[0163]
[0164] 其中,NI表示在项目初始时刻t0的任务数;Nnew(tl)表示在(t0,tl]时间段内进入项目的新任务数目;工作量比率fa1(tl)的取值受tl时刻可进行调度的任务数目以及它们的剩余工作量影响;Tjest_tot_eff是完成整个任务Tj所需的估计工作量; 是在tl时刻能够进行调度的任务Tj′的估计剩余工作量;
[0165] 2)熟练度比率fa2(tl):
[0166] 熟练度比率fa2(tl)定义为:tl时刻所有正在参与本项目的软件工程师在所有可调度的任务上的熟练度之和,与所有软件工程师在tl时刻可进行调度的任务上的最高可能熟练度(即1)之和的比率;
[0167]
[0168] 其中,M是所有参与本项目的软件工程师的数目, 是软件工程师ei在tl时刻对任务Tj的熟练度, 其中,常数C=100, 是一个分值,它衡量ei在tl时刻对技能k∈reqj∩skilli的掌握程度;熟练度比率fa2(tl)的取值受tl时刻所有正在参与本项目的软件工程师的数目,以及他们各自对任务的熟练度影响;
[0169] 共区分9种不同的状态:S1:0≤fa1(tl)≤0.4,0≤fa2(tl)≤0.6;S2:0≤fa1(tl)≤0.4,0.61;S7:0.82,…,时刻项目所处的状态;
[0170] (4.2)、更新Q值:
[0171] 依据下式更新状态-动作对表中的值Q(S(tl-1),A(tl-1)):
[0172]
[0173] 其中,NA为候选动作的个数;α是学习速率;γ是折现率,它表示将来回报对当前状态的影响,0≤α≤1,0≤γ≤1;
[0174] (4.3)、选择动作:
[0175] 依据动作选择机制为当前状态S(tl)选择一个动作A(tl);
[0176] 本发明动作选择机制的实施方法如下:
[0177] (a)、令NA为候选动作的个数,由状态-动作对表中的Q值确定在状态S(tl)下,每个候选动作Ai,i=1,2,…,NA,的选择概率P(S(tl),Ai)如下式(11)所示:
[0178]
[0179] (b)、计算出每个候选动作Ai,i=1,2,…,NA的累积概率 如下式(12)所示:
[0180]
[0181] (c)、在[0,1]区间内产生一个均匀分布的伪随机数r;
[0182] (d)、若 则选择动作A1作为状态S(tl)下的动作A(tl);否则,选择动作Ak,使得: 成立,将Ak作为当前状态S(tl)下的动作A(tl);
[0183] (4.4)、执行动作:
[0184] 依据A(tl),确定动态多目标memetic算法的全局搜索算子和局部搜索算子;依据任务和软件工程师的当前属性,基于动态多目标memetic算法,在较短的时间内产生一组在项目的工期、成本、抗风险能力、稳定性及开发人员的满意度之间折中的新的Pareto非支配解,并由项目管理者从中挑选出一个符合项目管理者偏好的解作为新的调度方案;计算求得的Pareto非支配解集的超体积指标HV值,并将该HV值作为动作A(tl)的回报值r(tl);
[0185] 本步骤中基于动态多目标memetic算法的重调度方式的具体实现步骤如下:
[0186] a)群体初始化。根据tl,l=1,2,…时刻项目的当前状态,采用启发式策略构造规模为npop的初始群体P(tl)。针对不确定属性(例如实施例中的任务工作量),随机采样一组值δq,q=1,2,…,N。计算初始群体中每个个体的多目标值(即项目的工期、成本、抗风险能力、稳定性和开发人员的满意度),并进行约束处理。从初始群体中确定出所有的Pareto非支配解构成多样性外部存储器群体DA(tl);设置收敛性外部存储器CA(tl)为空集,目标评价次数计数器ct=npop;
[0187] 初始群体P(tl)由npop个个体组成,设e_ava_set(tl)表示tl时刻所有参与该项目的软件工程师的集合,T_ava_set(tl)表示tl时刻所有可进行调度的任务的集合。群体中的每个个体表示tl时刻问题的一个候选解,即e_ava_set(tl)中的所有软件工程师在T_ava_set(tl)中各任务上的工作量分配矩阵 其中|·|表示集合中元素的个数。
[0188] 如果采用基于遗传算法GA的全局搜索算子,则个体使用二进制编码,由于工作量分配矩阵X(tl)中一共有|e_ava_set(tl)|·|T_ava_set(tl)|个元素xij(tl),每个xij(tl)采用nb位二进制位表示,因此一个个体的总长度为|e_ava_set(tl)|·|T_ava_set(tl)|·nb。因为xij(tl)的取值范围是 所以,
[0189] 在计算每个个体的目标值时,需将个体解码为工作量分配矩阵。例如,假设初始时项目中有两个软件工程师e2,e3,两项任务T1,T2,令nb=3,则个体的表示方法和其对应的工作量分配矩阵如图3所示。
[0190] 如果采用基于遗传算法GA的全局搜索算子,在tl时刻,根据启发式策略构造的初始群体P(tl)由下述三部分组成:
[0191] 第一部分,利用历史信息构造“历史解”。在tl时刻,确定当前所有的软件工程师和待开发的任务。提取他们在tl-1时刻调度方案中分配的工作量构成“历史解”。对于需要在tl时刻调度,但未出现在tl-1时刻调度方案中的软件工程师或任务,他们的工作量分配随机产生。20%的初始群体P(tl)由“历史解”及其变异个体组成。
[0192] 第二部分,通过捕捉项目中不同类型紧急动态事件(软件工程师请假离开、软件工程师回归、新的紧急任务下达)的特征,构造“调度方案修补解”。针对“软件工程师请假离开”这一事件,对于所有未受该事件影响的任务(即离开的工程师未参与该任务),保持分配给它们的软件工程师及其投入的工作量不变;对于受影响的每项任务,首先判断该任务开发队伍中剩余的软件工程师是否满足任务技能约束,如果满足,则保持他们对该任务分配的工作量不变;否则,在该任务的开发队伍中,增加若干名具有较高专业技能的软件工程师,直到满足任务的技能约束为止。针对“软件工程师回归”这一事件,对于每一项任务,如果回归的软件工程师具备该任务要求的某项技能,则将该软件工程师分配到此任务中并随机产生工作量,以加快任务的开发进度;否则,保持为此任务原先分配的方案不变。针对“新的紧急任务下达”这一事件,保持原有任务的分配方案不变,而对于新任务的工作量分配方案则随机产生。30%的初始群体P(tl)由“调度方案修补解”及其变异个体组成。
[0193] 第三部分,为了增加群体的多样性,在初始群体中引入随机个体。在tl时刻,每个软件工程师在每个待调度的任务中投入的工作量随机生成。50%的初始群体P(tl)由随机个体组成。
[0194] 如果采用基于相角调制差分进化算法AMDE的全局搜索算子,则个体使用四维实数编码,每个个体包含4个实数,分别表示下述二进制生成函数的4个系数a,b,c,d:
[0195] g(x)=sin(2π(x-a)×b×cos(2π(x-a)×c))+d
[0196] 每一维实数的取值范围是[-1,1]。
[0197] 本发明设置x∈[-2,2],由于二进制染色体的长度为l1=|e_ava_set(tl)|·|T_ava_set(tl)|·nb,因此,从[-2,2]中等间隔采样l1个x的值。解码过程如下:对于每个四维实数编码的个体,将它各维的值分别代入式g(x)=sin(2π(x-a)×b×cos(2π(x-a)×c))+d的4个系数a,b,c,d中。将每个x的采样值代入上式,如果得到的结果为正数,则记录二进制值1,否则,记录二进制值0,此过程迭代l1次,得到一个长度为l1的二进制串,然后将其转化为一个工作量分配矩阵。
[0198] 如果采用基于相角调制差分进化算法AMDE的全局搜索算子,在tl时刻,根据启发式策略构造的初始群体P(tl)由下述两部分组成:20%的初始群体P(tl)由上一个重调度时刻的历史调度解(四维实数编码的个体)及其变异个体组成;80%的初始群体P(tl)由随机个体组成。
[0199] 下面介绍约束处理的方法。
[0200] 如果某个体违反了任务技能约束,则将它的各个目标值分别设置为一个很高的惩罚值。假设reqsk为该个体中未满足约束的技能总数,则每个目标按如下公式分别惩罚:
[0201]
[0202]
[0203] f3(tl)=robustness=reqsk·2·Crob
[0204]
[0205] f5(tl)=satisfaction=reqsk·2·|T_ava_set(tl)|
[0206] 其中, 表示对任务Tj在tl时刻剩余工作量的估计值,Crob是一个常数,本发明设置Crob=100。
[0207] 如果某个个体违反了软件工程师不能超负荷工作的约束,则采用将工作量归一化的方法。如果分配方案使软件工程师ei在t'时刻超负荷工作,即 则将原先为他分配的在每个活动任务(即t'时刻正在开发的任务)中的工作量除以
如果 则不对工作量进行归一化处理。本发明采用的归一化处理方法能够
保证软件工程师不能超负荷工作的约束始终被满足。
[0208] b)个体繁殖:针对不确定属性,随机采样一组值φq,q=1,2,…,N;
[0209] b.1)全局搜索:将由动作A(tl)指定的全局搜索方法作用于CA(tl)和DA(tl),生成一个子代群体NPOP1(tl);计算NPOP1(tl)中每个个体的多目标值,令ct=ct+|NPOP1(tl)|,|NPOP1(tl)|为NPOP1(tl)的规模;
[0210] 本发明设置两种全局搜索方法:基于遗传算法GA的全局搜索算子和基于相角调制差分进化算法AMDE的全局搜索算子。
[0211] 采用基于遗传算法GA的全局搜索算子生成一个子代群体NPOP1(tl)的步骤如下:
[0212] A)设置集合NPOP11(tl)为空集;
[0213] B)选择参与交叉的2个交叉父代个体:
[0214] 如果CA(tl)为空集,则从初始群体P(tl)中均匀随机选取2个个体作为交叉父代个体;否则,从DA(tl)中均匀随机选取1个个体作为交叉父代个体,从CA(tl)中选择另一个个体作为交叉父代个体:如果CA(tl)中只有1个个体,则选择该个体,否则,从CA(tl)中均匀随机选择两个个体,并检测它们之间的互支配性,如果一个个体支配另一个,则选择该支配个体,如果它们互不支配,则从二者中随机选择一个。
[0215] C)对B)中选择的两个交叉父代个体执行基于矩阵的交叉操作,产生两个交叉子代个体,并将它们加入NPOP11(tl);如果|NPOP11(tl)|<2*npop,npop是群体规模,|NPOP11(tl)|是集合NPOP11(tl)中元素的个数,则转至步骤B),否则,转至步骤D);
[0216] 基于矩阵的交叉操作交换两个交叉父代个体工作量分配矩阵中的行或列,实施方式如下:
[0217] 产生一个均匀随机数r1∈[0,1];
[0218] 如果r1>0.5,则交换两个交叉父代个体工作量分配矩阵中的行:对于每一行,产生一个均匀随机数r2∈[0,1],如果r2>0.5,则选第一个交叉父代个体的相应行,否则,选第二个交叉父代个体的相应行;
[0219] 如果r1≤0.5,则交换两个交叉父代个体工作量分配矩阵中的列:对于每一列,产生一个均匀随机数r3∈[0,1],如果r3>0.5,则选第一个交叉父代个体的相应列,否则,选第二个交叉父代个体的相应列;
[0220] D)设置集合NPOP12(tl)为空集;
[0221] E)选择进行变异的1个变异父代个体:
[0222] 如果CA(tl)为空集,则从DA(tl)中均匀随机选取1个个体作为变异父代个体;否则,从CA(tl)中均匀随机选取1个个体作为变异父代个体;
[0223] F)对E)中选择的变异父代个体执行位翻转变异,产生1个变异子代个体,并将它加入NPOP12(tl);如果|NPOP12(tl)|
[0224] 位翻转变异算子将变异父代个体中的每一个二进制位,以概率Pm=1/ll,ll为二进制个体的长度,取为相反的状态,即由0变为1,1变为0。
[0225] G)令生成的子代群体NPOP1(tl)=NPOP11(tl)∪NPOP12(tl),将NPOP1(tl)输出。
[0226] 采用基于相角调制差分进化算法AMDE的全局搜索算子生成一个子代群体的步骤如下:
[0227] A1)设置集合NPOP11(tl)为空集;
[0228] B1)如果CA(tl)为空集,则从初始群体P(tl)中均匀随机选取一个个体作为目标个体x;如果|DA(tl)|>1,则从P(tl)\x中均匀选取 和 从DA(tl)中均匀随机选取 和其中,P(tl)\x是从P(tl)中去除x后剩余的个体集合;如果|DA(tl)|=1,则从P(tl)\x中均匀选取 和 从DA(tl)中均匀随机选取
[0229] 否则,如果CA(tl)不为空集,则从CA(tl)中均匀选取1个个体作为目标个体x;如果|CA(tl)|>3且|DA(tl)|>1,则从CA(tl)\x中均匀随机选取 和 从DA(tl)中均匀随机选取 和 否则,从(CA(tl)∪DA(tl)∪P(tl))\x中均匀随机选取 和其中,CA(tl)\x是从CA(tl)中去除x后剩余的个体集合,(CA(tl)∪DA(tl)∪P(tl))\x是从CA(tl)∪DA(tl)∪P(tl)中去除x后剩余的个体集合;
[0230] C1)对目标个体x执行DE/rand/2变异,产生一个捐献解v:
[0231] D1)检查捐献解v的每一维:如果某一维的值超出了它取值范围的上界或下界,就在取值范围内随机产生一个随机值,代替该维的值;
[0232] E1)对x和v执行二项式交叉,产生一个测试解u:
[0233]
[0234] 其中,uj是u,的第j维,j=1,2,3,4,jrand是从集合{1,2,3,4}中均匀随机产生的一个值;
[0235] F1)将u加入NPOP11(tl)中;如果|NPOP11(tl)|<2*npop,|NPOP11(tl)|是集合NPOP11(tl)中元素的个数,则转至步骤B1),否则,转至步骤G1);
[0236] G1)设置集合NPOP12(tl)为空集;
[0237] H1)如果CA(tl)为空集,则从初始群体P(tl)中均匀随机选取一个个体作为目标个体x;从P(tl)\x中均匀随机选择 和 从DA(tl)中均匀随机选择xbest;
[0238] 否则,如果CA(tl)不为空集,则从CA(tl)中均匀选取1个个体作为目标个体x,从DA(tl)中均匀随机选择xbest;如果|CA(tl)|>2,则从CA(tl)\x中均匀随机选取 和 否则,从(CA(tl)∪P(tl))\x中均匀随机选取 和
[0239] I1)对目标个体x执行DE/curr.to  best/1变异,产生一个捐献解v:
[0240] J1)检查捐献解v的每一维:如果某一维的值超出了它取值范围的上界或下界,就在取值范围内随机产生一个随机值,代替该维的值;
[0241] K1)对x和v执行二项式交叉,产生一个测试解u:
[0242] L1)将u加入NPOP12(tl)中;如果|NPOP12(tl)|
[0243] M1)令生成的子代群体NPOP1(tl)=NPOP11(tl)∪NPOP12(tl),将NPOP1(tl)输出。
[0244] b.2)局部搜索:将由动作A(tl)指定的局部搜索方法作用于NPOP1(tl)中每个个体的邻域,搜索Lmax次,Lmax是局部搜索的最大迭代次数,得到一个新的子代群体NPOP(tl);令[0245] ct=ct+Lmax·|NPOP1(tl)|   (13);
[0246] 为了与基于GA的全局搜索算子配合使用,采用两种局部搜索算子 和 为了与基于AMDE的全局搜索算子配合使用,采用两种局部搜索算子 和
[0247] 在 中,对GA中每个个体对应的工作量分配矩阵X(tl)中的每个元素,从集合中均匀随机挑选一个不同于该元素的值,以概率Pm替换该元素,取Pm=1/(|T_ava_set(tl)|·|e_ava_set(tl)|),其中,|T_ava_set(tl)|和|e_ava_set(tl)|分别是集合T_ava_set(tl)和e_ava_set(tl)中元素的个数; 交换X(tl)中随机选取的两行或两列;在 和 中,分别以P′m=1/4的概率,将多项式变异和均匀变异作用于AMDE中每个个体的每一元素上;局部搜索算子 的实施过程如下:将 作用于个体ind上,得到新的个体indn;如果indn Pareto支配ind,或indn和ind互不支配,但indn在基于Iε+的适应度上要大于ind,则令ind=indn;令Lmax为局部搜索的最大迭代次数,该过程重复执行Lmax次后,令indn=ind,输出indn作为局部搜索算子 的搜索结果; 和 的实施过程
与上述 的实施过程相同;
[0248] c)更新CA(tl):求出CA(tl)∪NPOP(tl)中具有不重复目标向量的个体,将它们设为CA(tl);如果|CA(tl)|>nCA,|CA(tl)|是CA(tl)的当前规模,nCA是预先设定的CA(tl)的最大规模,则依据基于Iε+指标的适应度值将多余的解从CA(tl)中依次移除;
[0249] Iε+指标描述在目标空间中,一个个体x1为了支配另外一个解x2所需的最短距离:
[0250] Iε+(x1,x2)=minε(norm_fi(x1)-ε≤norm_fi(x2),1≤i≤m)   (14)
[0251] 其中,m是目标的个数,为了将各个目标上的度量单位统一,分别取目标值fi(x1)、fi(x2)经归一化后的值norm_fi(x1)、norm_fi(x2),即:
[0252]
[0253]
[0254] 求取每个个体x1∈CA(tl)的适应度F(x1):
[0255]
[0256] 个体x1的适应度F(x1)越大,说明该个体越优;
[0257] 如果|CA(tl)|>nCA,则依据基于Iε+指标的适应度值将多余的解从CA(tl)中移除,具体步骤如下:
[0258] ⅰ)求出CA(tl)中具有最小适应度F(x*)的个体x*;
[0259] ⅱ)将x*从CA(tl)中移除;
[0260] ⅲ)更新CA(tl)中剩余个体的适应度:
[0261] ⅳ)如果|CA(tl)|>nCA,转至步骤ⅰ);否则,结束,输出更新后的规模为nCA的收敛性外部存储器CA(tl);
[0262] d)更新DA(tl):求出NPOP(tl)∪DA(tl)中所有的Pareto非支配解,将它们设置为DA(tl);如果|DA(tl)|>nDA,|DA(tl)|是DA(tl)的当前规模,nDA是预先设定的DA(tl)的最大规模,则设置AD(tl)为空集合,依据Lp范数距离迭代地从DA(tl)中选择nDA个合适的解,并将它们依次加入集合AD(tl)中;设置DA(tl)=AD(tl);
[0263] 两个个体x3和x4在目标空间上的Lp范数距离按下式求取:
[0264]
[0265] 其中,norm_fi(x3)和norm_fi(x4)分别是fi(x3)、fi(x4)的归一化值,p取[0266] 如果|DA(tl)|>nDA,则依据Lp范数距离迭代地从DA(tl)中选择nDA个合适的解的具体步骤如下:
[0267] Ⅰ)设置AD(tl)为空集合;
[0268] Ⅱ)从DA(tl)中确定出所有在各个目标上,具有最大或最小目标值的不重复个体,把它们从DA(tl)移出,加入AD(tl);
[0269] Ⅲ)对DA(tl)中的每个个体,求它到AD(tl)中所有个体的最短Lp范数距离;确定出DA(tl)中最短Lp范数距离最大的个体,并将该个体从DA(tl)移出,加入AD(tl);
[0270] Ⅳ)如果|AD(tl)|
[0271] e)终止准则判断:如果ct<最大目标评价次数,则转至步骤b);否则,算法终止,把多样性外部存储器群体DA(tl)作为Pareto非支配调度方案解集输出;
[0272] (5)、终止准则判断:
[0273] 如果整个项目没有完成,则在当前项目中执行新生成的调度方案,并转至步骤(4);否则,结束整个流程。
[0274] 在本发明的实施例中,基于Q学习memetic算法的动态多目标软件项目调度方法的参数设置如下:群体规模为100;多样性外部存储器群体DA(tl)和收敛性外部存储器CA(tl)的最大容量分别为100;对于不确定的工作量,采样次数N取为30;局部搜索的最大迭代次数为5;对于Lp范数距离中的参数p,在主动调度中取p=1/4,在重调度中取p=1/5;最大目标评价次数取为15000;对于在基于遗传算法GA的全局搜索算子中,每个xij(tl)采用nb=3位二进制位进行个体编码,交叉概率取0.9,变异概率取为1/L,其中L是每个二进制个体的长度;在基于相角调制差分进化算法AMDE的全局搜索算子中,交叉概率CR取0.1,变异因子F1,F2,F3是在区间[0.8,0.9]中均匀产生的随机数。
[0275] 本发明的效果可以通过以下仿真实验进一步说明:
[0276] 1.实验条件:
[0277] 在CPU为Intel core i5-5200U 2.2GHz、内存4GB、WINDOWS 7系统上使用Matlab 2010进行仿真。
[0278] 2.实验内容:
[0279] 本发明针对上述具有10个软件工程师、12个任务、5个技能要求的项目实施例求解动态调度方案。本实施例中,每项任务Tj要求的工作量具有不确定性,且有“软件工程师请假离开”、“软件工程师回到项目中”、“新的紧急任务下达”三类紧急动态事件随机发生。该项目的任务优先级图如图1所示,图1中1到12分别表示任务的编号,有向连线表示任务开发需满足的先后次序。
[0280] 3.实验结果
[0281] 采用本发明与现有技术中的启发式动态调度方法(当紧急动态事件发生时,根据启发式规则对原调度方案进行局部调整)分别对动态项目调度问题进行求解。表3列出了当分别采用两种方法时,完成整个项目的工期和成本的比较。由表3可见,与现有的启发式动态调度方法相比,本发明大幅度降低了项目的工期和成本,显著增强了项目开发的效率。
[0282] 表3两种不同方法完成整个项目的工期和成本的比较
[0283]
[0284] 综上,本发明提出的基于Q学习memetic算法的动态多目标软件项目调度方法能够同时处理实际项目开发环境中存在的各类动态因素,如紧急动态事件、不确定性属性。它同时优化了项目的工期、成本、抗风险能力、稳定性以及开发人员的满意度,使得生成的调度方案在保持较低项目成本和较短工期的同时,具备了更强的鲁棒性能和稳定性,并且兼顾了开发人员的满意度。与现有的启发式动态调度技术相比,本发明能够显著降低项目的开发工期和成本,因此,本发明非常适合处理现实世界中的动态项目调度问题。
[0285] 以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈