卜朱鎮,梁曉蓓,孟 虎,李 巖
(1.同濟大學經濟與管理學院,上海 200092;2.平安付科技服務有限公司上海分公司,上海 200232)
伴隨著互聯網經濟與信息化技術的發展,IT 軟件開發項目日益增多,隨之而來的多項目收益及資源沖突問題引起了眾多企業的重視。IT 軟件開發過程是一項綜合性的系統工程,包括了需求識別、架構設計、代碼開發、測試、上線部署及產線驗證等環節,這些階段同時涉及了產品、開發及測試等各類人力需求。在這一過程中,有兩個問題備受關注:一是如何從眾多待開發項目中篩選出當前迫切需要開展的項目并進行組合,以符合公司業務目標,使得整體收益最大化,并避免對其他低收益、高成本項目的盲目資源投入;二是在公司整體有限資源內,如何進行多項目的計劃制定和進度管理,以保證多項目在最短時間周期內達成預期目標,發揮資源最高效的利用。
針對以上問題,國內外許多學者從不同角度提出了多種解決途徑。例如從企業戰略與項目組合管理的協同關系角度出發,使用企業戰略導向下的項目組合管理模式及戰略協同度和協同發展度為衡量指標的建模方法[1-2]。又如通過建立項目組合收益最大化為目標的資源受限項目組合及調度問題的一般化模型,采取兩層決策方法進行求解[3]。也有立足進度管理角度,借鑒基于關鍵鏈的項目管理研究進展[4],對關鍵鏈的識別算法進行研究[5]。在軟件項目應用上,將關鍵鏈引入敏捷開發項目管理,尋求對進度計劃與控制中難點的相應解決方法[6]。
另一方面,也有學者提出了協同考慮項目組合和進度管理兩者間的關系[7]。此觀點下的相關研究雖然不多,但已受到了理論界和企業界的重視。基于此,本文將從IT 多項目管理的業務需求出發,首先分析項目組合影響因素,構建資源約束下最優項目組合模型并且定義項目重要度;其次研究關鍵鏈項目管理理論,提出以項目重要度為入參的基于關鍵鏈的多項目進度模型,形成項目組合與進度管理雙模型間協同效應;隨后,應用遺傳算法試圖對關鍵識別的NP 問題進行求解,最后使用支付公司實際案例數據,并通過Java 編程方式進行結果驗證。
根據美國項目管理協會提出的定義,項目組合指在可利用的資源和企業戰略計劃的指導下,進行多個項目或項目群投資的選擇和支持。項目組合管理是通過項目評價選擇、多項目組合優化,確保項目符合企業的戰略目標,從而實現企業收益最大化[8]。根據該定義,項目組合應當遵循企業戰略目標,在一定資源或資金的約束下進行多個項目組合選擇,使整個多項目收益期望達到最優。然而,在實際操作時,應考慮以下影響因素。
第一是現有資源的約束,主要指即將投入項目的成本,包括資金、人力、設備、場地等資源。這些資源直接影響項目組合能否正常實施。第二是預期收益,主要指項目成功后所帶來的回報。第三是能夠獲得回報的可能性,即項目成功率。其中后兩種因素又根據項目數量區分,包括單項目回報及成功率、多項目組合的整體回報及成功率。最后按照經濟學中對凈收益(利潤)的定義,用確定的總回報減去總成本將得到項目組合后的最終收益。需要說明的是,無論項目是否成功都必須投入成本,即成功率并非成本投入的必要條件。綜上可得:
項目組合收益=項目組合總回報×成功率-項目組合總成本 (1)
根據式(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 可表示如下:


為解決項目進度管理中學生綜合癥、帕金森定律及多任務效應等問題,約束理論TOC 的創始人、以色列物理學家艾利.高德拉特于1997 年在首次將TOC 技術應用于項目管理領域,提出關鍵鏈項目管理(Critical Chain Project Management,CCPM)[10]86。經過20 多年的發展,該理論已成功應用于眾多行業的項目管理,成為繼網絡計劃技術之后項目進度管理領域最具創新性的突破[11]。
關鍵鏈項目管理是在綜合考慮工作約束和資源約束下計算出來的制約整個項目周期的一個工作序列,將關鍵路徑、時間資源、費用等優化直接納入考慮范圍,其借鑒了TOC 約束理論,基本思想包括[10]87-89:(1)項目應當遵守整體優化而非局部優化;(2)以50%的概率完工時間作為工作估計時間;(3)考慮工作任務前后約束和資源可用約束來確定關鍵鏈;(4)設置多種緩沖區消除不確定因素對項目執行計劃的影響。
由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 的可使用量。
傳統的資源受限項目調度問題一般以最大完工時間最短為目標,應用遺傳算法等啟發式算法進行求解[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 個步驟為一輪種群進化,通過多輪進化后比較獲得最終的最優染色體,將其解碼為十進制任務編號序列,獲得多項目的進度計劃。
為證明本文所提出的項目組合及進度管理雙模型理念的可行性及有效性,使用支付公司實際案例進行驗證。該案例由5 個項目組成,在資源約束方面要求總的資金投入額≤30 萬元,開發人力≤8 人、測試人力≤4 人。

表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.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 基于關鍵鏈的多項目進度甘特圖
根據關鍵鏈法,在關鍵鏈尾部設置項目緩沖區PB、在非關鍵鏈(14-15)到關鍵鏈(16)的入口處設置輸送沖區(接駁緩沖區)FB,其中緩沖區大小的設置選用根差法進行求解。


由圖2 可得關鍵鏈工期為:33(天),加上項目緩沖PB 后工期為47(天),加上輸送緩沖后工期為50 天。而根據傳統的關鍵路徑法,按原估算工時求解最長路徑,得到工期也為50(天)。

圖2 加入緩沖區后多項目進度圖
結果顯示,采用本文遺傳算法所設計的關鍵鏈進度計劃明顯優越于傳統關鍵路徑法,在未計算緩沖區的情況下相比關鍵路徑法估算縮短了17 天,在考慮項目緩沖PB 后依然縮短3 天。雖然加上輸送緩沖FB 后與關鍵路徑法相同,但對比圖3 中兩種方法的資源使用情況,不難發現關鍵路徑法的曲線有多處超過了現有資源的約束,這些虛線框的部分將直接引發項目整體的延期。而關鍵鏈法則較好考慮了項目中的開發人力和測試人力資源約束問題,所增加的緩沖區更能避免項目實施中不確定性帶來的進度風險。
此外,案例實踐結果也驗證了本文所提出的項目組合及進度管理雙模型的可行性,在IT 企業多項目管理中可以考慮先對項目組合優化,再進行最優組合下的進度管理,運用關鍵鏈法代替傳統關鍵路徑法制定整體進度計劃,實現資源約束下的高效管理。

圖3 關鍵鏈法與關鍵路徑法R1 與R2 資源使用情況
本文通過分析IT 多項目管理中的資源約束下的兩大實際問題,提出構建項目組合及進度管理的雙模型理念,雙模型間通過項目重要度相協同,形成最優組合輸入最佳進度計劃輸出的創新管理模式。
在多項目進度管理方面,引入遺傳算法對關鍵鏈識別的難題進行了解答并采用Java 編程對算法進行了實現,特別是在染色體適應度計算方面給出了詳細闡述。最后通過實際案例對雙模型的實際應用進行了驗證,結果表明,本文從模型提出、算法設計,到編程實現充分考慮了資源約束的多項目管理特點,整套方法能有效識別高收益項目組合,提升項目管理效率,降低延期風險及成本,為企業多項目進度管理提供改進參考。