IT 项目组合及进度管理的双模型设计与算法实现

2020-08-14 12:35卜朱镇梁晓蓓
科技管理研究 2020年13期
关键词:适应度染色体种群

卜朱镇,梁晓蓓,孟 虎,李 岩

(1.同济大学经济与管理学院,上海 200092;2.平安付科技服务有限公司上海分公司,上海 200232)

伴随着互联网经济与信息化技术的发展,IT 软件开发项目日益增多,随之而来的多项目收益及资源冲突问题引起了众多企业的重视。IT 软件开发过程是一项综合性的系统工程,包括了需求识别、架构设计、代码开发、测试、上线部署及产线验证等环节,这些阶段同时涉及了产品、开发及测试等各类人力需求。在这一过程中,有两个问题备受关注:一是如何从众多待开发项目中筛选出当前迫切需要开展的项目并进行组合,以符合公司业务目标,使得整体收益最大化,并避免对其他低收益、高成本项目的盲目资源投入;二是在公司整体有限资源内,如何进行多项目的计划制定和进度管理,以保证多项目在最短时间周期内达成预期目标,发挥资源最高效的利用。

针对以上问题,国内外许多学者从不同角度提出了多种解决途径。例如从企业战略与项目组合管理的协同关系角度出发,使用企业战略导向下的项目组合管理模式及战略协同度和协同发展度为衡量指标的建模方法[1-2]。又如通过建立项目组合收益最大化为目标的资源受限项目组合及调度问题的一般化模型,采取两层决策方法进行求解[3]。也有立足进度管理角度,借鉴基于关键链的项目管理研究进展[4],对关键链的识别算法进行研究[5]。在软件项目应用上,将关键链引入敏捷开发项目管理,寻求对进度计划与控制中难点的相应解决方法[6]。

另一方面,也有学者提出了协同考虑项目组合和进度管理两者间的关系[7]。此观点下的相关研究虽然不多,但已受到了理论界和企业界的重视。基于此,本文将从IT 多项目管理的业务需求出发,首先分析项目组合影响因素,构建资源约束下最优项目组合模型并且定义项目重要度;其次研究关键链项目管理理论,提出以项目重要度为入参的基于关键链的多项目进度模型,形成项目组合与进度管理双模型间协同效应;随后,应用遗传算法试图对关键识别的NP 问题进行求解,最后使用支付公司实际案例数据,并通过Java 编程方式进行结果验证。

1 项目组合管理

1.1 项目组合与影响因素

根据美国项目管理协会提出的定义,项目组合指在可利用的资源和企业战略计划的指导下,进行多个项目或项目群投资的选择和支持。项目组合管理是通过项目评价选择、多项目组合优化,确保项目符合企业的战略目标,从而实现企业收益最大化[8]。根据该定义,项目组合应当遵循企业战略目标,在一定资源或资金的约束下进行多个项目组合选择,使整个多项目收益期望达到最优。然而,在实际操作时,应考虑以下影响因素。

第一是现有资源的约束,主要指即将投入项目的成本,包括资金、人力、设备、场地等资源。这些资源直接影响项目组合能否正常实施。第二是预期收益,主要指项目成功后所带来的回报。第三是能够获得回报的可能性,即项目成功率。其中后两种因素又根据项目数量区分,包括单项目回报及成功率、多项目组合的整体回报及成功率。最后按照经济学中对净收益(利润)的定义,用确定的总回报减去总成本将得到项目组合后的最终收益。需要说明的是,无论项目是否成功都必须投入成本,即成功率并非成本投入的必要条件。综上可得:

项目组合收益=项目组合总回报×成功率-项目组合总成本 (1)

1.2 最优项目组合模型构建

根据式(1),建立资源约束下的改进最优项目组合模型:

式(2) 中,E为期望最大净收益值,E(X)表示净收益关于项目组合选择X 的函数;X 是由N 个项目选择组成的集合,表示第i 个项目选择,当i=1 时,表示选择该项目,当i=0 时,表示舍弃该项目[9]。V 表示预计回报矩阵,P 表示项目成功概率,C 表示成本矩阵,一般为常数矩阵。

s.t.为约束条件,其中第1 条表示项目组合成本必须小于可用资源(r)。第2、3 条表示项目组合中可能存在的两种情况,即互斥与依赖。互斥表示选择某一个项目的同时必须放弃另一个项目,依赖表示选择某一项目时也必须选择另一个项目。

对于预计回报矩阵V 及项目成功概率P 可表示如下:

2 基于关键链的项目进度管理

2.1 关键链项目管理思想

为解决项目进度管理中学生综合症、帕金森定律及多任务效应等问题,约束理论TOC 的创始人、以色列物理学家艾利.高德拉特于1997 年在首次将TOC 技术应用于项目管理领域,提出关键链项目管理(Critical Chain Project Management,CCPM)[10]86。经过20 多年的发展,该理论已成功应用于众多行业的项目管理,成为继网络计划技术之后项目进度管理领域最具创新性的突破[11]。

关键链项目管理是在综合考虑工作约束和资源约束下计算出来的制约整个项目周期的一个工作序列,将关键路径、时间资源、费用等优化直接纳入考虑范围,其借鉴了TOC 约束理论,基本思想包括[10]87-89:(1)项目应当遵守整体优化而非局部优化;(2)以50%的概率完工时间作为工作估计时间;(3)考虑工作任务前后约束和资源可用约束来确定关键链;(4)设置多种缓冲区消除不确定因素对项目执行计划的影响。

2.2 基于关键链的多项目进度模型设计

由2.1 节所述思想,建立基于关键链思想的多项目进度管理模型:

式(4)中:目标函数(4)表示求解重要且用时短的所有项目的组合的最大值,将该值定义为进度优越度G,而表示项目重要度,表示第i 个项目的总工时;

s.t.约束条件1:定义第i 个项目工时的计算,即最大的任务完工时间减去第1个任务的开始时间,表示项目i 的任务j,表示项目i 的任务j完工时间,表示项目i 任务j 的开始时间;

s.t.约束条件2:应用关键链法以50%的概率对每个任务的工时(第i 项目j 任务)进行估算,求得关键链法任务的工时,表示项目i 的任务j 持续时间;

s.t.约束条件3:约束了项目中任务的紧前紧后关系,前一个任务的结束时间一定小于后一个任务的开始时间;

s.t.约束条件4:表示任务时刻的所有任务对资源k 的总需求都不能超过该资源在该时间的可使用量,表示项目i 任务j 在t 时刻对资源k 的需求量,表示在t 时刻资源k 的可使用量。

2.3 关键链识别的遗传算法设计

传统的资源受限项目调度问题一般以最大完工时间最短为目标,应用遗传算法等启发式算法进行求解[12-13]。而本文所讨论的基于关键链的多项目进度模型,其目标是在资源约束条件下求解多项目中重要的用时短的项目之和,即越重要的项目其总工时越少。该模型的本质是识别多项目关键链,使用遗传算法求解模型的过程如下:

(1)项目组合编码。将每一种多项目进度计划表示为一条染色体,其表现型是进度甘特图,基因型是对其表现型进行编码,并映射为一连串由项目的任务号组成的长序列。比如某3 个项目组合含8 个任务,其染色体的编码可以是60374152、03612745、或者07132645 等。为使后续计算机运算方便,进行二进制转换,例如将60374152 转换为二进制的110000011111100001101010。

(2)约束条件的种群。按照项目中任务的紧前紧后关系,对每条染色体中任务的先后顺序进行调整,比如任务0优先于任务1之前,任务7晚于任务6。通过多次循环生成满足约束的初始种群。

(3)适应度。染色体适应度的大小决定了个体的优劣程度,本文式(4)中的目标函数值为非负数,并且是以求解最大值为优化目标,可以用作适应度F。

(4)选择运算。计算种群中所有染色体适应度值的总和,求解单个染色体适应度占总和的概率每个概率组成一个区域,全部概率之和为1。应用轮盘赌选择方法,对每个染色体生成随机数,再判断该随机出落在哪个区域,将该区域对应染色体替代原染色体,概率高的染色体其区域面积大,落入的机会更高,通过以上过程获得新种群。(5)交叉运算。根据染色体为二进制长序列特点,选择使用的交叉算子为单点交叉[14]。首先对种群中的染色体随机进行配对,其次随机设置交叉点位置,再相互交互染色体之间的部分基因位,得到新染色体,新染色体必须满足第(2)步约束条件的限制,对不满足的染色体舍弃。遍历所有染色体获得新种群。(6)变异算法。在进行变异操作之前,先遍历种群中所有染色体,求出最大F 值所对应的染色体并标记为Best,将Best 添加到种群中并随机除去一个染色体,再遍历种群中的所有染色体,以较小的概率对每个基因位进行由0 到1,或者由1 到0 的变换,新染色体同样需要进行约束条件判断,最后遍历获得新种群。以上6 个步骤为一轮种群进化,通过多轮进化后比较获得最终的最优染色体,将其解码为十进制任务编号序列,获得多项目的进度计划。

3 实际案例应用

为证明本文所提出的项目组合及进度管理双模型理念的可行性及有效性,使用支付公司实际案例进行验证。该案例由5 个项目组成,在资源约束方面要求总的资金投入额≤30 万元,开发人力≤8 人、测试人力≤4 人。

3.1 最优项目组合生成

表1 案例项目成本回报汇总表 单位:万元

E=Max E(X)=(300×0.7-10)X1+(500×0.5-1 5)X2+(7 0 0×0.9-2 0)X3+(1 0 0 0×0.8-1 5)X4+(600×0.6-20)X5+300X1X3+10X3X4+5X1X2=200X1+235X2+610X3+785X4+340X5+300X1X3+10X3X4+5X1X2

通过枚举法得到表2 中4 种满足资源约束的情形。

观察可得,序号4 为最优组合情形,即项目1、项目3 和项目4 进行组合,此时期望净收益最大为1 905 万元。由此求得各项目重要度Q 值为:

3.2 适应度计算及关键链识别

依据3.1 章节计算结果,项目1、3、4 的任务、工时及资源需求如表3 所示,其中约束方面考虑支付公司经常出现的人力资源约束情况。

表3 项目任务工时及资源(人力)需求表 单位:人/天

表3(续)

本文基于Java 语言对2.3 节遗传算法进行编程,需按照关键链法以50%的概率完工时间作为任务工时,程序实现难点是对每条染色体长序列的适应度的求解,下文将对该部分的具体实现过程进行介绍。

3.2.1 适应度计算

首先定义两个List 集合R1、R2 用于记录单位时间所有开发人力和测试人力的使用情况,用于判断下一个任务是否有资源能够紧接着进行。其次,定义展示3 个项目的字符串类,分用pro1Bulder、pro3Bulder、pro4Bulder 记录,其中1 表示有任务执行,0 表示有资源冲突延后。随后,读取种群中任意一个染色体,逐一遍历染色体中的任务,并分3 种情况进行处理:

(1)当遍历到第1 个任务时。根据案例,第1个任务只可能是任务0、6 或14。将第1 个任务占用资源记录到R1 和R2 的List 上(注意从List 的0 位置开始,到持续任务长度个时间单位完成),并将这段时间的任务展现在proXBulder 上。例如第1 个任务是6,其属于项目3,关键链估计工时为3,则R1 为1,1,1;R2 为0,0,0;pro1Bulder 是00000…,pro3Bulder 是11100…,pro4Bulder 是00000…。

(2)当遍历到第2 个任务及后续的任务时。首先识别任务属于哪个项目,对其proXBulder 获取最后一个“1”出现的位置,将该位置+1 记录到SSX 整型变量。识别从SSX 位开始是否有资源支持该任务的资源需求,要求在该任务持续的整段周期上都要有资源。如果不满足,则将该任务的开始时间向后移动1 个时间单元,再做判断,若还不行则继续后移1 位,如此往复下去直到满足条件,将该任务插入。

其中,判断整段任务持续周期是否都有资源满足,可通过变量积加方式进行,即从开始位到结束位逐一遍历,资源满足则对变量putAlltask+1,最后看变量put All task 数值是否等于该任务持续时间task Time 数值,相等则表示成功可以在SSX 后插入该任务,并在R1、R2 上累加占用的资源,在proXBulder 上记录任务位置。关于校验是否满足的Java 代码如下:

最终可识别出满足资源约束的多项目进度计划,代入式(4)的目标函数求得适应度值F,经过选择运算、单点交叉运算及变异运算后,求得一次迭代后的染色体。

3.2.2 关键链识别

本案例实际程序运行时,设定参数:种群规模1 000,迭代次数500 次,交叉率0.6,变异率0.01。最终得到的最佳适应度值为0.031 792 54,染色体对应的任务序列为:6-7-14-0-1-8-2-9-10-15-16-17-18-3-11-19-12-13-4-5-20-21。

根据任务的工时及先后顺序,绘制图1 所示多项目进度甘特图。由关键链上任务总时差为0,即关键链上工作没有一点可以推迟的余地,通过甘特图可得该多项目的关键链为:6-7-8-16-17-18-19-20-21。

图1 基于关键链的多项目进度甘特图

3.3 多项目进度估算

根据关键链法,在关键链尾部设置项目缓冲区PB、在非关键链(14-15)到关键链(16)的入口处设置输送冲区(接驳缓冲区)FB,其中缓冲区大小的设置选用根差法进行求解。

由图2 可得关键链工期为:33(天),加上项目缓冲PB 后工期为47(天),加上输送缓冲后工期为50 天。而根据传统的关键路径法,按原估算工时求解最长路径,得到工期也为50(天)。

图2 加入缓冲区后多项目进度图

结果显示,采用本文遗传算法所设计的关键链进度计划明显优越于传统关键路径法,在未计算缓冲区的情况下相比关键路径法估算缩短了17 天,在考虑项目缓冲PB 后依然缩短3 天。虽然加上输送缓冲FB 后与关键路径法相同,但对比图3 中两种方法的资源使用情况,不难发现关键路径法的曲线有多处超过了现有资源的约束,这些虚线框的部分将直接引发项目整体的延期。而关键链法则较好考虑了项目中的开发人力和测试人力资源约束问题,所增加的缓冲区更能避免项目实施中不确定性带来的进度风险。

此外,案例实践结果也验证了本文所提出的项目组合及进度管理双模型的可行性,在IT 企业多项目管理中可以考虑先对项目组合优化,再进行最优组合下的进度管理,运用关键链法代替传统关键路径法制定整体进度计划,实现资源约束下的高效管理。

图3 关键链法与关键路径法R1 与R2 资源使用情况

4 结束语

本文通过分析IT 多项目管理中的资源约束下的两大实际问题,提出构建项目组合及进度管理的双模型理念,双模型间通过项目重要度相协同,形成最优组合输入最佳进度计划输出的创新管理模式。

在多项目进度管理方面,引入遗传算法对关键链识别的难题进行了解答并采用Java 编程对算法进行了实现,特别是在染色体适应度计算方面给出了详细阐述。最后通过实际案例对双模型的实际应用进行了验证,结果表明,本文从模型提出、算法设计,到编程实现充分考虑了资源约束的多项目管理特点,整套方法能有效识别高收益项目组合,提升项目管理效率,降低延期风险及成本,为企业多项目进度管理提供改进参考。

猜你喜欢
适应度染色体种群
改进的自适应复制、交叉和突变遗传算法
山西省发现刺五加种群分布
基于双种群CSO算法重构的含DG配网故障恢复
多一条X染色体,寿命会更长
为什么男性要有一条X染色体?
由种群增长率反向分析种群数量的变化
启发式搜索算法进行乐曲编辑的基本原理分析
真假三体的遗传题题型探析
能忍的人寿命长
基于人群搜索算法的上市公司的Z—Score模型财务预警研究