用線性規划建模(確定參數)關鍵路徑法


用線性規划建模(確定參數)關鍵路徑法

關鍵路徑法(CPM)又稱為網絡計划法,是項目管理的基本方法。項目管理關心項目的執行時間和執行費用等問題,首先的是項目的總工期,其次是組成項目的工作的開始完成時間和結束完成時間及其對總工期的影響,而后是當項目需要壓縮工期時,每個項目任務的工期是否需要壓縮、壓縮量是多少等問題。在整個項目中,有一系列首尾相接的任務,他們的浮動時差為0,組成了所謂關鍵路徑。如果某個關鍵路徑上的任務一旦延期,則總工期一定會延期,除非壓縮其他關鍵路徑上的任務的工期。這里先討論確定參數時的關鍵路徑法。

最小總工期和關鍵路徑尋找的線性規划模型

以[1]中第八章的一個例題為例,假設有A,B,C,D,E,F五項任務組成了項目,他們執行時長和緊前任務如下表所示:

按照上面的信息可以畫出網絡計划圖:

這個圖里的A任務用弧(1,3)表示,其執行時長度為6。C認為用弧(3,5)表示,執行時間長度為8。C任務的緊前任務是A和B。Dummy任務是執行時長為0的虛任務,作用是避免同樣的弧(即點對)表示不同的任務。例如不采用Dummy時,任務A和任務B都會用弧(1,3)表示而產生歧義。

對於上面的網絡計划圖,建立線性規划模型時必須給予表達。方法是出所有弧及弧上的權(即執行時長):

 G={
    1 2  9
    1 3  6
    2 3  0
    3 4  7
    3 5  8
    4 5 10
    5 6 12    
 }

用變量x[i]表示第i節點的執行時刻,於是線性規划的目標即極小化總工期,即min x[N]-x[1]。這里 N=6,是項目的結束節點編號,也是節點的數目。

min x[N]-x[1]

線性規划的約束只要保證任務的執行時間長度就可以了:

x[G[k][2]] - x[G[k][1]] >= G[k][3] | k=1,..., NE

上面假設G里面共有NE條邊,則對任意一條邊k (k=1,...,NE), 其弧上第二節點的執行時刻x[G[k][2]]與第一節點的執行時刻x[G[k][1]]之差應大於等於該項任務的執行時長G[k][3]。

有必要把x[1]設為0:

x[1]=0

把目標和約束寫在一起:

min x[N]-x[1]
subject to
    x[G[k][2]] - x[G[k][1]] >= G[k][3] | k=1,...,NE
    x[1]=0

上面的模型還不能夠被求解,缺少符號的說明和數據,加上后這樣:

min x[N]-x[1]
subject to
    x[G[k][2]] - x[G[k][1]] >= G[k][3] | k=1,...,NE
    x[1]=0
where
    N,NE are numbers
    G[k][j] is a number | k=1,...,NE; j=1,...,3
    x[i] is a variable of nonnegative number|i=1,...,N
data
    N=6
    NE=7
    G={
      1 2  9
      1 3  6
      2 3  0
      3 4  7
      3 5  8
      4 5 10
      5 6 12    
    }

在+Leapms軟件中對上面的模型進行求解得到:

+Leapms>solve
The LP is solved to optimal.
找到線性規划最優解.非零變量值和最優目標值如下:
    .........
    x2*=9
    x3*=9
    x4*=16
    x5*=26
    x6*=38
    .........
    Objective*=38
    .........

得知項目的最短工期為38。如果想獲取關鍵路徑信息需要利用對偶值。首先使用savelp命令獲得lp模型(即展開的代數模型)。

\==================================\
\Problem cpm
\.lp file gnerated by +Leapms
\==================================\
Minimize 
 Obj: -x1+x6
Subject to
 C1: -x1+x2>=9
 C2: -x1+x3>=6
 C3: -x2+x3>=0
 C4: -x3+x4>=7
 C5: -x3+x5>=8
 C6: -x4+x5>=10
 C7: -x5+x6>=12
 C8: x1=0

End
\==================================\

而后使用dual命令獲取當前的對偶解:

+Leapms>dual
    dual[1]*=1
    dual[2]*=0
    dual[3]*=1
    dual[4]*=1
    dual[5]*=0
    dual[6]*=1
    dual[7]*=1
    dual[8]*=0

忽略對偶為0的對偶變量,得關鍵路徑為邊(即lp模型里的約束)C1,C3,C4,C6,C7, 對應於弧(1,2), (2,3), (3,5), (5,6). 即關鍵路徑如下:

 

 參考文獻

[1] WayneL.Winston, 韋恩·L.溫斯頓, 溫斯頓. Operations research[M]// OPERATIONS RESEARCH. 2011.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM