发明内容
为了解决上述背景技术提出的技术问题,本发明旨在提供一种基于遗传文化基因算法的项目调度方法,提高了局部搜索能力,避免陷入局部最优,实现快速高效的项目调度。
为了实现上述技术目的,本发明的技术方案为:
一种基于遗传文化基因算法的项目调度方法,包括以下步骤:
(1)读取项目的输入信息,定义优化目标,设定约束条件:
项目的输入信息包括每个任务的工作量、技能要求和任务优先级图,每位软件工程师所掌握的技能、可在本项目中投入的最大工作量、正常月薪和加班月薪;优化目标包括项目工期和项目成本;约束条件包括任务技能约束和软件工程师未超负荷工作的约束;
(2)初始化遗传文化基因算法参数:
设置遗传文化基因算法的迭代次数Tmax、种群规模sizepop、联赛选择规模Stour、交叉概率Pc以及局部搜索的迭代次数gmax,设项目中有M名软件工程师,N项任务,则变异概率Pm为1/(MN),设迭代次数计数器t=0;
(3)产生初始父代种群,并进行局部搜索,得到新的父代种群:
随机生成sizepop个个体构成初始父代种群P'(t),每个个体表示一个工作量分配矩阵:
X=(xij)M×N
其中,为第i个工程师ei在第j项任务Tj中投入的工作量占全日制工作量的百分比,i=1,2,…,M,j=1,2,…,N;为第i个工程师ei能够对本项目投入的最大工作量占全日制工作量的百分比;k为解的划分粒度;计算初始种群中每个个体的目标值duration和cost,duration和cost分别表示项目工期和成本,并进行约束处理;按下式计算每个个体的适应度:
f(X)=ω1·duration+ω2·cost
其中,ω1和ω2表示目标duration和cost的相对重要性权重;对每个个体分别进行局部搜索,得到新的父代种群P(t);从P(t)中确定出当前最优个体Xbest,即适应度值最小的个体;
(4)生成子代种群:
对父代种群P(t)执行选择、交叉和变异操作,产生新的个体构成子代种群Q'(t);计算Q'(t)中每个子代个体的目标值和适应度;
(5)对子代种群进行局部搜索:
在子代种群Q'(t)中每个个体Vp的邻域内,分别执行局部搜索操作得到新个体Zp,其中,p=1,2,…,sizepop;将Zp与当前最优个体Xbest进行比较,如果Zp的适应度优于Xbest,即f(Zp)<f(Xbest),则令Xbest=Zp;经局部搜索后产生的所有个体Zp构成新的子代种群Q(t);
(6)生成新一代父代种群:
合并父代种群P(t)和子代种群Q(t),从中选取适应度最优的一半个体构成下一代父代种群P(t+1);令t=t+1;
(7)终止准则判断:
若t>Tmax,则终止迭代,输出适应度最优个体Xbest,该个体即为项目中每位软件工程师在每项任务中投入的工作量分配结果;否则,转至步骤(4)。
步骤(1)中所述项目工期表示完成项目所有任务所花费的时间开销,它定义为:
其中,和分别表示任务Tj的开始时间和完成时间,且
步骤(1)中所述项目成本表示完成项目所有任务所花费的财力,它定义为:
其中,t'表示项目处于开发阶段的某一个月;表示在t'期间付给软件工程师ei的薪酬;T_active_set(t')表示在t'期间正在进行开发的任务集合;xij表示ei在任务Tj中投入的工作量占全日制工作量的百分比;表示ei能够对整个项目投入的最大工作量占全日制工作量的百分比,当时,表示ei能够加班工作;和分别表示ei的正常月薪和加班月薪;
步骤(1)所述任务技能约束指参与某项任务的所有软件工程师必须具备该任务要求的所有技能,即
其中,reqj表示任务Tj所需求的技能的集合;skilli表示软件工程师ei所掌握的所有技能的集合;
步骤(1)所述软件工程师不能超负荷工作的约束指在任一时期t'≥0,一个软件工程师为正在进行开发的任务同时投入的工作量之和不超过他对整个项目投入的最大允许工作量,即
且
其中,表示第i个软件工程师ei对t'内正在进行开发的任务投入的工作量之和。
在步骤(2)中,交叉概率Pc为0.9。
步骤(3)和步骤(5)中所述局部搜索方法的具体步骤如下:
(a)获取初始个体Vp,令代数计算器g=1,mark=0;
(b)如果mark的值为0,则对个体Vp执行“随机替代”操作,生成新个体Zp;所述“随机替代”操作:从个体Vp的工作量分配矩阵中随机选择一个元素vpij,然后从集合中随机挑选一个与vpij当前取值不同的值替代vpij;如果mark的值不为0,则对个体Vp执行“交换”操作,生成新个体Zp;所述“交换”操作:从个体Vp的工作量分配矩阵中随机选取两行或两列进行交换,然后对生成的新个体Zp执行启发式算子操作,即如果软件工程师ei不具备任务Tj要求的任一技能,则将ei对Tj分配的工作量设为0;
(c)如果新个体Zp的适应度值优于个体Vp,即f(Zp)<f(Vp),则令Vp=Zp,否则,令mark=|mark-1|;
(d)如果g=gmax,则令Zp=Vp,输出Zp,Zp即为对原个体Vp进行局部搜索操作后得到的新个体;否则,令g=g+1,转至步骤(b)。
步骤(4)中所述选择操作是联赛选择,依据联赛选择规模Stour,从父代种群P(t)中随机选取Stour个不同的个体,从中挑选适应度最优的一个个体加入交配池,此过程循环sizepop次;将交配池中的个体随机配对为sizepop/2对;所述交叉操作是依据交叉概率Pc,确定交配池中的每对个体是否需要进行交叉操作;如果某对个体需要进行交叉操作,则对这两个交配个体工作量分配矩阵中的每一行或列,以0.5的概率进行交换;所述变异操作是依据变异概率Pm,将个体矩阵中待变异的元素替换为从集合中随机挑选的另一个值。
采用上述技术方案带来的有益效果:
(1)本发明采用文化基因算法实现项目调度,将全局搜索和基于个体的局部启发式搜索相结合,该机制使得它的搜索效率高于传统遗传算法;
(2)本发明对种群中的父代个体实施“交换随机选取的部分行或列”的交叉操作,从而避免了对父代个体已建立平衡的破坏,即保持对某个软件工程师的工作量分配以及所有软件工程师对某一任务投入的工作量不变;
(3)本发明在采用遗传算法进行全局搜索的基础上,加入了基于“随机替代”操作和“交换”操作的局部搜索机制,能够有效地提高局部搜索能力,避免陷入局部最优,快速高效地实现项目中软件工程师和任务的调度。
具体实施方式
以下将结合附图,对本发明的技术方案进行详细说明。
一个实际项目中,有10个软件工程师和12项任务(即i=10,j=12),共有5个技能要求(设为1、2、3、4、5)。任务优先级图如图1所示。每项任务Tj要求的工作量及技能要求集合reqj如表1所示。每个软件工程师ei对整个项目投入的最大允许工作量正常月薪加班月薪以及所掌握的技能集合skilli如表2所示。
表1
表2
使用本发明提出的基于遗传文化基因算法的项目调度方法求解该项目实施例的调度方案,主体流程图如图2所示,具体步骤如下:
(1)初始化。读取项目的输入信息,包括任务属性(见表1)和软件工程师的属性(见表2);给出优化目标的定义,并设定约束条件。
目标“项目工期”表示完成项目所有任务所花费的时间开销,它定义为:
其中,和分别表示任务Tj的开始时间和完成时间N为项目中任务的总数,本实例中,N=12。
目标“项目成本”表示完成项目所有任务所花费的财力,定义为:
其中,t'表示项目处于开发阶段的某一个月;表示在t'期间付给软件工程师ei的薪酬;M为项目中软件工程师的总数,本实例中,M=10;T_active_set(t')表示在t'期间正在进行开发的任务集合;xij表示ei在任务Tj中投入的工作量占全日制工作量的百分比;表示ei能够对整个项目投入的最大工作量占全日制工作量的百分比,表示ei能够加班工作;和分别表示ei的正常和加班月薪。“项目工期”和“项目成本”的目标值均越小越好。
本发明设定的约束条件包括任务技能约束,以及软件工程师不能超负荷工作的约束。
任务技能约束指参与某项任务的所有软件工程师必须具备该任务要求的所有技能,即
其中,reqj表示任务Tj所需求的技能的集合;skilli表示软件工程师ei所掌握的所有技能的集合。
软件工程师不能超负荷工作的约束指在任一时期t'≥0,一个软件工程师为正在进行开发的任务同时投入的工作量之和不超过他对整个项目投入的最大允许工作量,即,
且
其中,表示第i个软件工程师ei对t'内正在进行开发的任务投入的工作量之和。
(2)初始化遗传文化基因算法参数;
设置遗传文化基因算法的迭代次数Tmax为50,种群规模sizepop(每个群体中含有若干个体,每个个体表示问题的一个候选解,群体规模sizepop是指群体中含有的候选解个数)为10,联赛选择规模Stour为2,交叉概率Pc为0.9,局部搜索的迭代次数gmax为20,设项目中有M名软件工程师,N项任务,则变异概率Pm为1/(MN),本实例中,Pm=1/120;设迭代次数计数器t=0。
(3)产生初始父代种群,并进行局部搜索;
随机生成sizepop个个体构成初始群体P'(t),每个个体表示一个工作量分配矩阵:
X=(xij)M×N
其中,为第i个工程师ei在第j项任务Tj中投入的工作量占全日制工作量的百分比,i=1,2,…,M,j=1,2,…,N;为第i个工程师ei能够对本项目投入的最大工作量占全日制工作量的百分比;k为解的划分粒度,本发明设k=7。计算初始种群中每个个体的目标值,包括项目工期duration和成本cost,并进行约束处理;对每个个体分别进行局部搜索,得到新的初始种群P(t);从P(t)中确定出当前最优个体Xbest,即适应度值最小的个体。
按下式计算每个个体的适应度:
f(X)=ω1·duration+ω2·cost
其中,ω1和ω2表示目标duration和cost的相对重要性权重,本实施例设置ω1=0.1,ω2=10-5;约束处理的方法如下:
如果某个体违反了任务技能约束,则将它的各个目标值分别设置为一个很高的惩罚值。假设reqsk为该个体中未满足约束的技能总数,则每个目标按如下公式分别惩罚:
如果某个个体违反了软件工程师不能超负荷工作的约束,则采用将工作量归一化的方法。如果分配方案使软件工程师ei在t'时刻超负荷工作,即则将原先为他分配的在每个活动任务(即t'时刻正在开发的任务)中的工作量除以如果则不对工作量进行归一化处理。本发明采用的归一化处理方法能够保证软件工程师不能超负荷工作的约束始终被满足。
对个体进行局部搜索的具体步骤如下:
(i)获取初始个体Vp,令代数计算器g=1,mark=0;
(ii)如果mark的值为0,则对个体Vp执行“随机替代”操作,生成新个体Zp;“随机替代”操作从个体Vp的工作量分配矩阵中随机选择一个元素vpij,然后从集合中随机挑选一个与vpij当前取值不同的值替代vpij;如果mark的值不为0,则对个体Vp执行“交换”操作,生成新个体Zp;“交换”操作从个体Vp的工作量分配矩阵中随机选取两行或两列进行交换,在实施过“交换”操作之后,对生成的个体Zp执行启发式算子操作,即如果软件工程师ei不具备任务Tj要求的任一技能,则将ei对Tj分配的工作量设为0;
(iii)如果新个体Zp的适应度值优于个体Vp,即f(Zp)<f(Vp),则令Vp=Zp,否则,令mark=|mark-1|;
(iv)如果g=gmax,则令Zp=Vp,输出Zp,Zp即为对原个体Vp进行局部搜索操作后得到的新个体;否则,令g=g+1,转至上述步骤(ii)。
上述局部搜索操作的流程图如图3所示。
(4)生成子代种群;
对父代种群P(t)执行选择、交叉和变异操作,产生新的个体构成子代种群Q'(t);计算Q'(t)中每个子代个体的目标值和适应度。
本发明的选择操作为联赛选择,依据联赛选择规模Stour,从父代种群P(t)中随机选取Stour个不同的个体,从中挑选适应度最优的一个个体加入交配池,此过程循环sizepop次;将交配池中的个体随机配对为sizepop/2对;
依据交叉概率Pc,确定交配池中的每对个体是否需要进行交叉操作;如果某对个体需要进行交叉操作,则对这两个交配个体工作量分配矩阵中的每一行(或列),以0.5的概率进行交换;
对于交叉操作后产生的新个体,依据变异概率,确定该个体工作量分配矩阵中的每个元素是否需要进行变异操作;如果需要,则将该元素替换为从集合中随机挑选的另一个值。
(5)对子代种群进行局部搜索;在子代种群Q'(t)中每个个体Vp(p=1,2,…,sizepop)的邻域内,分别执行局部搜索操作,将局部搜索后得到的个体Zp(p=1,2,…,sizepop)与当前最优个体Xbest进行比较,如果Zp的适应度优于Xbest,即f(Zp)<f(Xbest),则令Xbest=Zp;经局部搜索后产生的所有个体Zp构成新的子代种群Q(t)。
(6)生成新一代父代群体;合并父代P(t)和经局部搜索后的子代种群Q(t),从中选取适应度最优的一半个体构成下一代父代种群P(t+1);令t=t+1;
(7)终止准则判断;若t>Tmax,则终止迭代,输出适应度最优的个体,该个体即为项目中每位软件工程师在每项任务中投入的工作量分配结果;否则,转至上述步骤(4)。
本发明的效果可以通过以下仿真实验进一步说明:
1.实验条件:
在CPU为Intel core Duo 2.2GHz、内存4GB、WINDOWS XP***上使用Matlab 2010进行仿真。
2.实验内容:
本发明针对上述具有10个软件工程师、12个任务、5个技能要求的项目实施例求解项目调度方案。该项目的任务优先级图如图1所示,图1中1到12分别表示任务的编号,有向连线表示任务开发需满足的先后次序。
3.实验结果
采用本发明与现有遗传算法分别对项目调度问题进行求解。图1为实施例的任务优先级图。将两种方法在实施例中分别独立地运行30次。表3分别列出了两种方法在30次运行中求得的调度方案最佳及平均适应度,最佳及平均项目工期,以及最佳及平均项目成本。由表3可见,与现有的遗传算法相比,本发明能够搜索到适应度更优的个体,大幅度降低了项目的工期和成本,显著增强了项目开发的效率。
表3
图4给出了本发明与遗传算法搜索到的最佳个体适应度随着目标评价次数变化的进化曲线图,以比较两种方法的收敛性能。由图4可见,虽然遗传算法在搜索过程的早期阶段能够搜索到优于本发明的个体,但随着进化代数的增加,它搜索到的解陷入局部最优,无法求得全局最优解。相比之下,本发明的遗传文化基因算法将基于种群的全局搜索和基于个体的局部启发式搜索相结合,它既能够在大范围的搜索空间中进行探索,也能够充分挖掘当前解周围的局部信息,因此,本发明能够跳出局部最优区域,从而避免早熟收敛,并搜索到项目调度问题的全局最优调度方案。
图5为采用本发明遗传文化基因算法求解实施例得到的最佳项目调度方案对应的甘特图,图6为采用传统遗传算法求解实施例得到的最佳项目调度方案对应的甘特图。从甘特图中可以获取每项任务的开始时间、结束时间、持续时间,以及任务之间的先后关系。由图5可见,本发明遗传文化基因算法求得的项目调度方案的项目工期为6.1325个月,由图6可见,遗传算法求得的项目调度方案的项目工期为6.9965个月。
综上,本发明提出的基于遗传文化基因算法的项目调度方法,在采用遗传算法进行全局搜索的基础上,加入了基于“随机替代”操作和“交换”操作的局部搜索机制,克服了基于遗传算法的项目调度方法局部搜索能力较弱、易于陷入局部最优、调度效率低下的缺点,能够快速高效地实现项目中软件工程师和任务的调度。
以上实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。