摘要
以最优化项目工期和员工满意度为目标,建立多目标软件项目调度问题的数学模型.该模型考虑员工的技能等级划分、任务重要程度等实际因素,并将重要任务与高技能等级员工相匹配.提出一种基于Q学习的超启发式算法求解该模型.基于交叉算子和引入随机抖动的Jaya算子对任务-员工矩阵进行全局搜索;利用问题信息设计了缩短项目工期和增加员工满意度的局部挖掘策略;将全局搜索算子、邻域参数的取值和局部挖掘策略组合为8种低层启发式策略;给出一种基于Q学习的高层策略,根据低层策略的历史表现为不同进化状态下的种群自适应选择合适的低层策略.实验结果表明,所提算法在绝大多数算例上的超体积率(HVR)和反世代距离(IGD)性能优于代表性算法.
Abstract
A mathematical model is formulated for the multi-objective software project scheduling problem,aiming to optimize both the project duration and employee satisfaction.The model takes into account practical factors such as employee skill level and task importance,and matches important tasks with employees of higher skill ratings.Subsequently,a hyper-heuristic algorithm based on Q-learning is proposed to solve the model.In this algorithm,global search of the task-employee matrix is performed based on the matrix crossover operator and Jaya operator with random jitter,and local exploitation strategies are designed using problem-specific information to reduce project duration and increase employee satisfaction.Global search operators,neighborhood parameter values,and local exploitation strategies are combined to form eight Low-Level Heuristics (LLHs).Furthermore,a high-level strategy based on Q-learning is introduced to adaptively select appropriate low-level heuristics for populations in different evolutionary states,according to the historical performance of the LLHs.Experimental results show that the proposed algorithm outperforms representative algorithms in terms of Hypervolume Ratio (HVR) and Inverted Generational Distanced (IGD) on most of test cases.
0 引言
随着社会和科学技术的快速发展,我国软件工程市场的竞争日益激烈,软件开发的需求量也与日俱增[1].据国家工业和信息化部数据显示,2023年1—10月,我国软件业务收入为98 191亿元,较2022年同期提升3.7个百分点,我国软件产业将保持稳定向好发展态势.为满足软件市场的资源需求,需要加强对时间和员工两个方面的管理.在软件开发过程中,管理者手动分配员工完成任务的效率低、耗时长.Chen等[2]研究表明,我国软件项目的失败率大于30%,多数软件项目无法按时完成的根本原因是缺乏有效的调度.软件项目调度问题(Software Project Scheduling Problem,SPSP)是软件开发的重要一环,旨在找到一种合理的人力资源与任务的分配方式,在满足技能、最大投入度等约束的同时实现工期最短、成本最低等目标[3].SPSP能够最大限度地利用人力资源,提高团队协作效率,高效地完成企业项目.
2007年,Alba等[3]提出SPSP,此后,许多文献从不同方面对该问题的模型展开了进一步研究.从员工技能角度,Kosztyán等[4]在模型中考虑了员工的不同技能和技能效率,根据任务所需技能来分配拥有某些技能和效率的员工;申晓宁等[5]在模型中考虑了新技能机制,并融入新技能熟练度的增长趋势.现有文献大多将拥有不同技能的员工分配在其技能范围内的任务中,却忽略了员工之间技能等级差距对团队协作的影响.从任务角度,王培源[6]为节约项目成本与时间,将企业所接项目任务外包给非特定的网络群体;Li等[7]研究了具有不确定持续时间的任务,提出一种基于场景的线性规划模型.然而,在实际软件项目调度中,重要任务(需要快速高质量处理的紧急任务)对项目工期等目标影响较大,而现有软件项目文献大多未考虑到任务之间的相对重要程度,以及重要任务的员工分配要求.从优化目标角度,肖菁等[8]考虑了项目开发成本,提出一种基于时间轴的并行多项目调度模型;陈志远等[9]除考虑了持续时间和项目成本外,还将调度鲁棒性和调度稳定性作为目标.以上目标大多围绕项目展开,而忽略了员工对分配方案的满意度.本文以最优化项目工期和员工满意度为目标,建立了考虑员工技能等级和任务重要程度的多目标软件项目调度(Skill Level and Task Importance-based Multi-Objective Software Project Scheduling,SLTIMOSPS)的数学模型.
SPSP已被证明为NP-hard问题[10].传统的数学规划方法能够求得小规模问题的精确解,但对于中大规模问题无法在有限的时间内得到满意的解.启发式方法相对于数学规划方法,更简单且易实现,但无法保证解的质量.元启发式算法通常结合多种启发式方法能够更全面地探索解空间,避免陷入局部最优,获得更好的求解性能.Kosztyán等[4]提出混合遗传算法求解SPSP;Shen等[11]为求解大规模SPSP,对决策变量进行分组优化,提出基于协同的进化算法;陈志远等[9]提出一种改进的双归档进化算法求解多目标动态软件项目调度.然而,元启发式算法通常在进化过程中采用固定的搜索算子,而不针对种群在各阶段的进化状态调整搜索策略,不能较好地适应环境,导致在产生后代个体时缺乏多样性.
超启发式算法由Cowling等[12]在2001年提出.和元启发式算法不同的是,超启发式算法作用于启发式空间而不直接作用于特定的问题,它的最大特点是无需人工调节即可自适应任何环境状态,在进化过程中选择合适的搜索算子来解决复杂的优化问题[13].因此,本文选用超启发式算法求解SPSP.超启发式算法框架包括高层启发式策略(High-Level Strategy,HLS)、低层启发式算子(Low-Level Heuristic,LLH).由于超启发式算法的问题域与高层策略相互分离,因而更加注重高层策略的设计.尹丹等[14]在高层策略中设计一种基于三维概率模型的分布估计算法来求解车辆路径问题;刘思宇等[15]将自适应遗传算法作为高层策略用来确定流水车间中订单排序启发式和机器选择启发式的操作组合.相比于作为高层策略的进化算法,强化学习是不需要耗时的优化过程.Q学习是强化学习的一种无模型学习方法,通过与环境的交互向智能体提供反馈来提高搜索效率[16],在指导LLH选择方面具有独特的优势.Zhao等[17]提出了基于Q学习的高层策略预先设计的LLH集合中选择合适的低级启发式求解车间调度问题;崔建双等[18]在高层策略采用Q学习策略自动选择底层算子求解多模式资源约束项目调度.Q学习在调度问题上表现出优异的性能,可以在解空间内进行高效搜索.目前许多文献对基于Q学习的超启发式算法进行改进,并已成功应用到移动群智感知[19]、路径规划[20]、车间调度[17]等优化问题上.
为了有效求解本文建立的SLTIMOSPS模型,提出一种基于Q学习的超启发式算法(Hyper-Heuristic with Q-learning,HHQL).根据种群的多样性和外部档案的收敛性设计Q学习中的状态;通过当前代与上一代之间收敛性和多样性两方面的变化定义奖励函数;将不同的全局搜索算子、局部挖掘策略和邻域参数的取值组合为8种LLH,基于Q学习的高层策略选择适合当前状态的LLH.与已有算法的对比结果表明,所提算法具有更高的求解性能.
1 考虑员工技能等级和任务重要程度的多目标软件项目调度模型
本节描述了SLTIMOSPS模型的员工和任务属性,并规定各项约束关系,建立了求解SLTIMOSPS的数学模型.
1.1 问题描述
软件项目被分为N个具有优先级顺序和重要程度的任务,每个员工的技能等级根据专业知识和专业技能划分为5级,管理者将员工分配到各任务中并确定每个员工对任务的投入度,在满足技能约束和任务约束的条件下,最优化项目工期和员工满意度.由于一个企业的骨干员工相对少,分配到某一任务的员工等级差可能较小,那么该任务中员工之间的技能沟通障碍较小,员工对于团队满意度相对较好,但会导致技能等级较低的多名员工分配到一个任务中,使得项目工期的增加.因此,项目调度过程中的项目工期和员工满意度存在相互制约或矛盾的关系,可以作为多目标优化问题中的两个优化目标.为了使SPSP更贴合实际,本文建立了SLTIMOSPS数学模型.
1.2 符号和定义
所建模型中员工和任务属性如表1所示.
项目中的多个任务具有优先级关系,所有任务根据任务优先级图[3](Task Precedence Graph,TPG)完成,每个任务都需要在其前置任务完成后才能开始执行.在执行项目时可并行处理多个任务,所以一个员工可同时参与多个任务,一个任务也可以分配给多个员工合作完成.员工技能熟练度会随着时间的推移而发生变化,因此参考文献[21],定义员工Ei对任务Tj熟练度为[21],.
1.3 员工技能等级划分
本文所描述的技能是指某一类技术员工在软件项目工作中所应用的具体技能,如测试技能、C++编程技能等.为了促进项目团队的运作和协调,将员工所拥有的技能划分等级,低技能等级的员工可以向高等级的员工学习.为了提高项目开发的效率,应当将高技能等级的员工分配给重要任务.一个完整且实用的技能等级模型应以管理者对员工在专业知识和专业技能两方面的考核为依据[22].专业知识的分数根据对员工专业理论知识的考核而定,专业技能分数通过对员工技能熟练度pki及其在历史项目中的工作表现综合评估而定.两者均按5分制打分.当员工Ei在技能k上的专业知识和专业技能两方面的分数均大于或等于3时,按图1给出Ei对技能k的等级vki,共有5个不同的等级.
表1员工和任务属性
Table1Attributes of employees and tasks
本文借鉴文献[23]的企业员工分类分级体系,考虑员工专业知识和专业技能,由企业管理者对员工的专业知识和专业技能进行考核后给出评定,分数在[3,5]之间.员工的专业知识和专业技能考核分数均在4.5,5范围内,其技能等级为5级;员工的专业知识考核分数在4.5,5内并且专业技能考核分数在4,4.5中,或专业技能考核分数在4.5,5内并且专业知识考核分数在4,4.5中,其技能等级为4级.将某一技能等级为4级和5级的员工评定为该技能上的骨干员工[23].
1.4 任务重要程度的划分
在软件项目中,不同任务的重要程度不同.任务的重要程度越大,说明该任务的紧急程度越大,需要骨干员工的参与,以确保能够快速高质量地完成.例如,测试任务比编写代码任务的重要程度大,对于测试任务,骨干员工的参与会高效地完成该任务,大大缩减项目工期且保证项目稳步进行.任务的重要程度通常根据专家经验或知识而定.本文将任务Tj的重要程度分为5级,即Textj∈1,2,3,4,5,Textj越高,表示任务的重要程度越高.当Textj为5[24]时,定义Tj是重要任务,记所有重要任务构成的集合为Tim={Tj|Textj=5,j=1,2,···,N}.本文对于重要任务,要求分配给该任务的员工中必须有一名骨干员工.骨干员工的参与可以降低项目面临的风险,带领团队实现项目目标,同时也可以通过协作和知识分享提升整个团队的技能水平.
图1员工技能等级划分
Fig.1Employee skill level classification
1.5 员工满意度
合作完成同一项目的所有员工构成该项目的团队,一个团队员工的技能水平参差不齐.对于技能等级差较大的团队,会出现明显的沟通障碍.考虑到员工对任务团队中队友的分配方案是否满意,将员工满意度作为优化目标之一.分配方案可以理解为在满足所有约束下,为各个任务分配相应员工的一种具体安排.若在分配方案中员工Ei的队友等级差较小且工作熟悉度较大,则团队员工满意度越好,反之,则团队员工满意度越差.员工满意度为所有团队员工满意度的均值.员工对项目团队有较好的满意度可能会提升团队表现并推进项目顺利进行,反之则会降低工作效率或延长项目进度.本文定义员工满意度与员工之间的工作熟悉度及员工之间的等级差有关.
员工之间的工作熟悉度主要取决于两个员工之间在近一段时间内的项目合作次数.项目合作次数越多,表明员工之间的工作熟悉度越大.将员工Ei和员工El的项目合作次数归一化后得工作熟悉度mil,如式(1)所示:
(1)
式(1)中:zil表示员工Ei和员工El的工作合作次数;r表示员工之间的最小合作次数;g表示员工之间的最大合作次数.为了保证mil有意义,设置ε为一个较小数字.
员工之间的等级差定义为两个员工之间在同一技能上等级的差值,将等级差归一化后得,如式(2)所示.员工之间的等级差距越小,表示员工进行技能沟通的障碍越小,员工对团队满意度也越好.
(2)
式(2)中:表示员工Ei和员工El在技能k上的等级差;表示员工Ei在技能k上的等级.
项目团队分为多个任务团队,将任务Tj的团队员工满意度Sj定义为该团队中所有员工对分配方案的满意度之和.某一员工与其他员工之间的工作熟悉度越大、等级差距越小,则表示该员工的满意度越好.为了便于多目标优化问题的求解,将Sj转为最小化目标,定义如式(3)所示:
(3)
基于此,将员工满意度S定义为项目中所有任务的平均团队员工满意度,如式(4)所示:
(4)
1.6 数学模型
本文所提模型的决策变量是员工-任务分配矩阵.xij表示员工Ei对任务Tj的投入度,若xij=0表示员工Ei没有被分配到任务Tj的开发中,若xij>0表示员工Ei被分配到任务Tj的开发中,xij∈[0,Emaxedi].本文模型的目标函数和约束条件如式(5)—(10)所示:
(5)
(6)
(7)
(8)
(9)
(10)
式(5)表示最优化项目工期[25]和员工满意度.式(6)表示每一个任务都至少有一个员工参与.式(7)表示分配到某一任务的所有员工技能集合必须包含该任务所需技能.式(8)表示每个员工对当前任务的投入不能超过其最大投入度,否则,采用文献[25]的修复法处理产生的不可行解.式(9)表示每个任务的员工数在满足任务约束的条件下不得超过其最大人头数的上限,Tempj表示满足该任务技能约束所需的最小员工数[11].式(10)表示对于重要任务集合Tim中的每个任务,至少在一个所需技能上,必须有骨干员工参与.
2 求解模型的Q学习超启发式算法
本文针对SLTIMOSPS模型,提出一种基于Q学习的超启发式算法HHQL.本节介绍了算法总体框架、个体编码解码方式、基于Q学习的高层策略以及LLH的设计.
2.1 算法框架
求解SLTIMOSPS模型的HHQL算法框架如图2所示.1)初始化Q表和父代种群P,将P中的非支配解放入外部档案;2)基于Q学习的高层策略确定低层启发式策略LLH;3)根据LLH中的全局搜索算子进行搜索产生子代和父代种群,更新外部档案;4)利用LLH中的局部挖掘策略和邻域参数的选值对外部档案新增个体进行搜索,更新外部档案.
2.2 编码和解码
所提算法HHQL采用整数编码.设SPSP包含M个员工和N个任务,每个个体编码均为矩阵,其中,yij∈{0,1,2,···,h},h表示解的粒度,即将员工Ei的最大投入度平均分为h份,本文设h=10[25].元素yij的含义是员工Ei将其最大投入度的yij/h奉献给任务Tj.解码时,将个体矩阵Y转化为员工-任务的实际分配矩阵,如式(11)所示:
(11)
式(11)中:xij表示员工Ei对任务Tj的投入度,.
2.3 Q学习超启发式算法
Q学习超启发式算法包括低层启发式策略和高层策略.
2.3.1 低层启发式策略
低层启发式策略由全局搜索算子、局部挖掘策略和邻域参数的取值三部分组成,以考虑不同类型搜索算子间的耦合关系,兼顾它们对算法性能的共同作用.
1)全局搜索算子
全局搜索算子包含两种.第一种为矩阵交叉算子[25](Matrix Crossover Operator,MCO),该算子以相同概率交换两个父代矩阵的某一行或者某一列来产生子代候选解.交换某一行表示对于某一员工,将两父代个体中该员工对应任务的相应投入度进行交换.交换某一列表示对于某一任务,将两父代个体中该任务对应员工的相应投入度进行交换.为保证矩阵交叉算子对员工或任务搜索的平衡性,设置相同的概率交换某一行和某一列.
图2HHQL算法框架
Fig.2Framework of HHQL
第二种为引入随机抖动的Jaya算子(Jaya Operator with Random Jitter,JORJ).经典的Jaya算法基于局域迭代公式和持续改进的规则,使所求解趋近于最好解且避开最差解.对于多目标优化问题,不存在唯一的个体最优解,通常设置一个外部档案保存历代搜索到的Pareto非支配解集.本文将外部档案作为当前最优解集,将上一代父代和子代种群的并集P∪Q进行非支配排序,把得到的最后一层作为当前最差解集.从上述两个解集中分别随机选出一个最优解Ybest和最差解Yworst.若当前解Ycur与最差解Yworst在矩阵相同位置上有相等的投入度值,则将该值用最优解Ybest同一位置的值替换.由于Jaya算子过多地利用了最优解信息,可能会陷入局部最优.为了提高Jaya算子对解空间的探索能力,本文引入随机抖动操作,随机选择当前矩阵个体中的某一元素yij,以一定的小概率Pe,将其替换为{0,1,2,···,h}中的某一与yij相异的值.Jaya算子的操作示例如图3所示.
图3引入随机抖动的Jaya算子示意
Fig.3Illustration of Jaya operator with random jitter
2)基于目标信息的局部挖掘策略
为了进一步提高算法的搜索精度,可在全局搜索算子求得的Pareto非支配解邻域内精细地挖掘,以期搜索到更优解.本文分别利用模型中的两个目标信息,设计了两种局部挖掘策略.
第一种是基于项目工期的局部挖掘策略(Duration-based Local Search Strategy,DLSS).DLSS的实现方法如算法1所示.根据剩余投入度对员工排序,依次判断员工是否有能够从事且尚未分配的任务.若有首次满足条件的员工则记为Ed,随机选择该员工能够从事且尚未分配的任务Tl,将Ed分配给Tl;若不存在Ed,随机挑选Ycur中一个元素由{0,1,2,···,h}一个随机值替代.
第二种是基于满意度的局部挖掘策略(Satisfaction-based Local Search Strategy,SLSS).SLSS的实现方法如算法2所示.根据团队员工满意度对任务进行排序,对任务依次判断是否有能够从事且尚未参与当前任务的员工.若有首次满足条件的任务则记为Tw,将能够从事且尚未参与Tw的所有员工构成集合w_set,从参与Tw的员工中选取一名工作熟悉度之和最小或等级差之和最大的员工Eu,并从w_set中选取一名工作熟悉度之和或等级差之和比Eu好的员工Eq来替代;若不存在Tw,随机挑选Ycur中一个元素由{0,1,2,···,h}一个随机值替代.
3)邻域参数的取值
局部挖掘策略有助于算法在解空间中找到精度更高的解,而邻域挖掘次数V对局部搜索的效果有着重要影响.较大的V有助于提高局部挖掘的深度但会消耗过多的计算资源,因而V需适当取值,本节将邻域挖掘次数分别设置为V1和V2两种取值.
结合上述全局搜索算子、局部挖掘策略和邻域参数的取值,可定义8种低层启发式搜索策略LLH,如表2所示.
表28种低层启发式低层策略
Table2Eight LLHs
2.3.2 基于Q学习的高层策略
Q学习是一种经典的强化学习方法,通过智能体与环境进行交互试错逐步优化策略,最大化智能体从环境中获得的累计奖励值,从而自主学习到最优策略[16].因此,所提算法采用基于Q学习的高层策略,对低层启发式策略LLH进行选择.本节给出Q学习中的状态、动作和奖励的定义.
1)基于收敛性和多样性的状态定义
依据外部档案的收敛性和种群多样性来定义种群的进化状态.收敛性ΔHV定义为当前代外部档案的超体积[27]HV与上一代的变化值,即ΔHV=HVt-HVt-1.由于HV越大,解集的收敛性能越好,因此,ΔHV>0时表示外部档案的收敛性有所提升.
种群的多样性ΔR定义为当前代所有个体拥挤距离[26]的均值与上一代的变化值,即ΔR=Rt-Rt-1.由于拥挤距离越大说明个体邻域中的个体分布越稀疏,因此ΔR>0时表示种群多样性有所提升.
根据上述种群收敛性和多样性的定义,可将种群状态划分为4种,如表3所示.
表34种种群状态的划分
Table3Division of four population states
2)动作定义
在所提HHQL中,高层策略确定了动作的选择机制,动作则决定了对进化个体的搜索方式.2.3.1节介绍了全局搜索算子、局部挖掘策略和邻域参数的取值,将三者组合而成的8种LLH作为Q学习中的动作(表2).
3)奖励函数
奖励函数r表示执行动作后的反馈信号.由于本文依据收敛性和多样性指标的变化定义环境的状态,因此,种群当前的状态可以反映一个动作的搜索性能.奖励函数的定义如下:
(12)
式(12)中:S1表示外部档案收敛性和种群多样性比上一代均有改进,此时给予较大奖励1;S2和S3分别表示收敛性或多样性比上一代有所改进,而另一性能有所退化,给予较小奖励0.5;S4表示两个性能均退化,给予惩罚值-1.
根据以上设计的状态、动作和奖励函数,基于Q学习的高层策略在所提算法HHQL的每一进化代中根据当前种群的状态确定最佳动作.
3 实验结果与分析
为了验证所提算法和改进策略的有效性,使用Pycharm软件进行仿真实验,计算机处理器参数Intel® CoreTM i7-12700H CPU@2.30 GHz,16 GB运行内存.设计3组实验:1)对所提算法中引入的新参数进行参数分析;2)改进策略的有效性验证;3)将所提算法HHQL与6种具有代表性的算法进行对比,以验证所提算法的性能.
3.1 算例生成和实验设置
采用文献[3]中的算例生成器生成12个软件项目调度人工合成算例,同时选取文献[2]中的3个商业软件项目实例.人工合成算例的员工人数M∈10,30,任务数N∈10,40,项目所需技能数取5或10.人工合成算例的命名方式为#1E_#2T_#3S,其中,#1E表示员工人数,#2T表示任务数,#3S表示技能数.3个实例分别命名为Real-1、Real-2和Real-3,员工数均为10,任务数分别为15、15、12,技能数均为6.员工技能等级和员工之间的项目合作次数分别是[0,5]和[0,15]内随机生成的整数.
3.2 参数分析
所提算法HHQL中的学习率α、折扣率、贪婪因子ε和邻域挖掘次数V为新引入的参数,采用田口正交实验对它们进行参数分析.因子水平数取为4,即对上述4种参数各取4个水平的值,分别为α∈{0.1,0.2,0.3,0.4}、γ∈{0.6,0.7,0.8,0.9}、ε∈{0.8,0.85,0.9,0.95}以及V∈{5,10,15,20}[28].正交实验的规模设为L16(44),依据文献[29]的方法选取16组参数组合进行分析.算法种群规模设为100[28].正交实验步骤如下:
步骤1:在16组参数组合中,算法分别运行20次,终止条件均为目标评价次数达到50 000.
步骤2:对于所提算法在第a种参数组合下第b次运行求得的Pareto非支配解集,计算超体积比率HVRab[30],a=1,2,···,16,b=1,2,···,20.
(13)
步骤4:通过16组参数组合的信噪比,计算出4个参数分别在4种水平下的平均信噪比,最终选出最佳参数.
以算例10E_15T_5S为例,16种不同参数组合的信噪比计算结果如表4所示.图4绘制了各参数在4种不同水平下的平均信噪比.由图4可知,γ=0.7、α=0.1、ε=0.9、V=10为参数的最佳取值,并将此作为本文后续实验的算法参数.在所提算法基于Q学习的高层启发式策略中,需将邻域挖掘次数V的2个取值作为部分候选动作,因此选取图4中参数V平均信噪比最高的2个取值10和20.
表410E_15T_5S算例上不同参数的取值结果对比
Table4Comparison of results with different parameter values on 10E_15T_5S
3.3 改进策略的有效性验证
2.3.1 节设计的LLH由全局搜索算子、局部挖掘策略和邻域参数的取值三部分组成.为了验证将这三部分作为整体进行考虑的有效性,本节将所提LLH与文献中已有的两种低层启发式策略(记为LLH1和LLH2)进行比较.文献[13]中的LLH1由全局搜索算子和局部挖掘策略构成,文献[19]中的LLH2仅包括不同的局部挖掘策略.将所提算法中的LLH分别用LLH1和LLH2替代,得到两个对比算法HHQL-LLH1和HHQL-LLH2.
为了验证2.3.2节基于Q学习的高层策略的有效性,分别采用随机选择策略RD和文献[32]的自学习选择策略SL替代所提算法中的高层策略,产生对比算法HHQL-RD和HHQL-SL,其中,SL是指根据各算子的历史成功率评估LLH的选择概率.选取常用的多目标优化性能指标超体积率(HVR)[30]和反世代距离(IGD)[16]评价算法的性能.HVR越大,表示算法搜索到的Pareto非支配解集的收敛性和分布的宽广性越好;IGD越小,非支配解集的收敛性和分布的均匀性越好.每种算法在15个不同的算例上分别运行20次,终止条件均为目标评价次数达到50 000.为了更好地比较不同算法之间的优劣,引入显著水平为0.05的Wilcoxon秩和检验对所得结果进行统计测试.所提算法HHQL和本节对比算法的比较结果如表5所示,其中,“+”和“-”分别表示HHQL显著优于或显著劣于对比算法,“=”表示两者无明显差异.每个算例中HVR和IGD在20次运行中的最优平均值加粗表示.“+/-/=”分别表示在15个算例上所提算法与某一对比算法相比,显著优于的算例个数、显著劣于的算例个数以及无显著差异的算例个数.
由表5可知,所提算法HHQL在15个算例中有13个均取得最好的HVR和IGD平均值.同时,显著水平为0.05的Wilcoxon秩和检验结果显示,HHQL在绝大多数算例上的求解性能均显著优于其他4种对比算法,说明所提LLH和基于Q学习的高层策略是有效的.对比算法HHQL-LLH1忽略了邻域参数对局部挖掘策略的重要影响,未在不同的种群状态下为局部挖掘策略匹配到相适应的挖掘深度,因此不能很好地平衡挖掘精度和计算资源.HHQL-LLH2仅将局部挖掘策略作为低层启发式策略,既未考虑全局搜索算子和局部挖掘策略之间的配合,也未兼顾邻域参数在局部挖掘策略中的作用.所提LLH将全局搜索算子、局部挖掘策略和邻域参数作为整体,供高层策略进行自适应选择,考虑了不同算子和参数之间的内在关联和对算法性能的共同推进作用,因此使算法获得了收敛性和分布性能更优的非支配解集.与随机选择低层启发式策略的HHQL-RD和依据成功率按概率选择的HHQL-SL相比,所提HHQL采用的Q学习高层策略能够通过智能体与环境的迭代交互与试错,根据经验和奖励逐步地自主学习到最优策略,即不同种群状态下对应的最佳LLH.因此,HHQL获得了更好的求解性能.
图4各参数在4种不同水平下的S/N平均值
Fig.4Average S/N values of each parameter at four levels
表5所提算法HHQL和替换单一策略算法的对比结果
Table5Comparison of the proposed HHQL and single-strategy replacement algorithm
图5给出了不同算法在算例20E-30T-10S上的Pareto非支配解集对比结果.F1表示项目工期,单位为月,F2表示员工满意度.由图5可见,所提算法HHQL的Pareto非支配解集位于本节其他4种对比算法的下方,收敛精度明显更优.此外,所提算法的Pareto非支配解集具有比较均匀的分布性能.
图5不同算法在算例20E-30T-10S中的 Pareto非支配解对比
Fig.5Comparison of Pareto non-dominated solutions among different algorithms on 20E-30T-10S
3.4 所提算法的性能验证
为验证所提算法HHQL在求解模型时的性能,将它与6种近年来的代表性算法在12个人工合成算例和3个实例上进行对比.其中,TLBOGA[7]和GASMAB[33]是求解软件项目调度问题SPSP的已有进化算法.TLBOGA混合了基于教学的优化算法和遗传算法;GASMAB是一种超启发式算法且在高层策略上采用滑动多臂老虎机策略自适应选择交叉和变异算子.其余4种对比算法均是超启发式算法.HHQL1[20]是基于Q学习的超启发式算法,其动作选择和Q值更新策略中的参数皆采取自适应方式,解的接受机制采用蒙特卡罗接受规则;HyRVNS[34]将启发式选择策略和接受策略作为LLH;HHAB[27]针对多目标优化设计了自适应多臂老虎机策略用来选择LLH,并采用奖励平衡策略;HHQL2[17]将Q学习中的状态设置为种群中每个个体,奖励值根据目标值的变化而设计.对比算法均采用与所提算法HHQL相同的个体编码解码方式.终止条件均设为目标评价次数达到50 000,其余参数与原文献相同.6种对比算法与HHQL在本文所建模型中的求解结果如表6所示.由表6可知,所提算法HHQL在绝大多数算例上的HVR和IGD值均取得了最优值.显著水平为0.05的Wilcoxon秩和检验结果表明,HHQL在绝大多数算例上的HVR和IGD值显著优于其余6种算法.原因在于所提算法HHQL依据相邻进化代中外部档案收敛性和种群多样性的变化给予LLH不同程度的奖励或惩罚,通过累计奖励值从而更好地引导进化过程对种群个体搜索行为的选择,为算法提供了正确的搜索方向.此外,HHQL还将全局搜索、局部挖掘和邻域参数联合定义为LLH,考虑了它们对算法性能的综合影响,有助于种群在进行大规模搜索的同时,跳出局部最优.
表6HHQL与算法性能验证中6种对比算法的实验结果
Table6Comparison results of HHQL and 6 algorithms in algorithm performance validation
由图6可知,在进化过程中使用频率较高的动作是LLH1和LLH5,两种动作虽然采用不同的全局搜索算子,但均采用相同的局部挖掘策略SLSS和邻域挖掘次数V1=10.说明两种全局搜索算子对于全局搜索作用相似,但SLSS与V1的组合能够使算法有较好的局部收敛能力,从而能够得到精度更高的解,获得的奖励值也较大,因此该组合被选择的次数较多.相比之下,LLH2在4种状态下被选择的次数均较少,LLH2和LLH1不同之处在于采用的挖掘次数不同,说明过度的挖掘次数会消耗目标评价次数,减少了全局搜索的机会,不利于求解精度的提高,因此选择合适的邻域挖掘次数对于局部搜索的性能有着重要影响.此外,从图5中可以看出,HHQL在算例20E-30T-10S上的Pareto非支配解位于本节6种对比算法的下方,获得了更优的收敛精度,且解分布较为均匀.综上,所提算法HHQL能够有效求解所建模型,可以为企业提供一套工期更短、员工满意度更高的员工-任务调度方案.
图6HHQL中各状态下每个LLH使用次数的占比
Fig.6Usage frequency proportion of each LLH under different states in HHQL
3.5 调度方案举例
本节给出调度方案的示例.从HHQL在实例Real-3上获取的Pareto非支配解集中挑选5个具有代表性的解,结果列于表7.其中,Sol1和Sol2分别是在项目工期和员工满意度目标上最好的极端最优解,其余3个解是在两个目标上表现均较好的折中解.由此可见,HHQL产生的Pareto非支配解集能够让软件项目经理更加深入地了解多个目标之间的不同折中,以辅助经理做出正确的决策.图7给出了HHQL在Real-3上的一个Pareto非支配解(Sol3)的甘特图.由图7可以看出各任务的开始时间、结束时间以及项目工期.
表7HHQL算法在实例Real-3上的代表性解
Table7Representative solutions of HHQL on Real-3
图7HHQL在Real-3上一个非支配调度方案的甘特图
Fig.7Gantt chart of a non-dominated solution by HHQL on Real-3
4 结论
本文建立了考虑员工技能等级和任务重要程度的多目标软件项目调度模型,引入了三个实际因素:1)项目中各任务的重要程度;2)员工技能等级的划分;3)将重要任务与高技能等级的员工相匹配.为求解所建模型,提出一种基于Q学习的超启发式算法,给出三方面改进:1)设计两种基于目标信息的局部挖掘策略;2)考虑全局搜索算子、局部挖掘策略和邻域参数的耦合关系,组合成八种LLH;3)根据收敛性和多样性的变化设计状态和奖励,采用Q学习高层策略为当前状态自主选择合适的LLH.实验结果表明,与对比算法相比,所提算法在绝大多数不同规模的软件项目调度算例上均能搜索到一组收敛性和分布性更好的Pareto非支配解.本文尚有一些不足之处:1)模型未考虑开发环境中的不确定因素;2)如何在Q学习中为每个阶段确定适当的动作选择策略尚需进一步探讨.

