要徑排程法


 
 

簡介

  一般營建工程所須考慮之三大要素為:工期、成本與品質,其中以工期一項最為重要, 因為工期延誤不但會因工程契約而增加額外的工程成本,倘為營利性建物,則直接延後 其報酬回收的時間;另外在工期耽延的壓力下趕工,更會影響工程的品質。因此土木工 程師需對工程的工期與排程作一稹密的規劃。要徑法(Critical Path Method)即是針 對有效控制工期與成本,所發展出來的一種系統方法。


  較大型的工程計劃可細分為多個獨立或相連屬的作業項目,各項目間具有一定的先後關 係與具體明確的範圍,並依照經驗與工程資源確定各作業項目的工期。欲使工程在預定 時間內完工,則上述的作業項目因存有不同先後與不同工期的特性,可分為以下兩種: 第一種是完全沒有寬裕時間之要徑作業,另一種則是具有一定寬裕時間之浮徑作業。工 程執行上只需針對要徑作業嚴加要求勿使其耽延,對於浮徑作業只要控制不超過其寬裕 時間,即可達到最短總工期的要求,並不須要每個作業項目都拼命趕工,其剩餘之工程 資源則可平均分配給各個作業項目以達最高效率,此即要徑法最大的功能。


  本程式即是建構一套決定要徑與排程的專家系統,提供簡明、完整的人機界面,使用者 只需輸入各作業項目之工期與其立即後續作業,本程式將直接計算各項目的最早、最晚 之開工與完工時間及各浮時,進而決定要徑作業,繪製工程網狀圖,建議排程與實際排 程等多項功能,輸出結果分以數值及圖形表示,增加可讀性。


  決定要徑作業的過程,需先計算個作業項目的最早開工時間(ES)、最早完工時間(EF) 、最晚開工時間(LS)與最晚完工時間(LF),其具明顯的次序邏輯關係,因而適合以 物件導向-message sending與物件monitor刻面的觀念作程式的編寫,另可將問題化分 為數個子問題,方便系統的建構與擴充。


 

物件與方法

 

●物件主要包括--

 

1. 節點(Node):

其下之Instance為使用者所輸之各作業項目,Slot包括ID--作業項目代號,供邏輯 推理與計算

 
Duration作業項目之工期
ES該作業之最早開工時間
EF該作業之最早完工時間
LS該作業之最晚開工時間
LF該作業之最晚完工時間
TF該作業之總浮時,即不影響總工期下,該作業所能延遲開工的時間
FF該作業之自由浮時,即不影響後續作業開工時間下,該作業所能延遲開工的時間
IF該作業之干擾浮時,即TF與FF之差值
Predecessor該作業之立即前置作業
Successor該作業之立即後續作業
StartNode該工程之起始作業項目
EndNode該工程之結束作業項目



 

2. 計算器(Computer):

其下分要徑計算與排程計算兩類。


要徑計算(CriticalPath)--分日程(Date)與浮時(Float)兩種,目的在利用得自Node 之各項參數以繪製網狀圖

排程計算(Schedualing)--分資源限制與資源平整兩種,目的在繪製排程桿狀圖 (Bar Chart)


  3. 輔助說明:提供界面之各項輸出入說明

4. 邏輯法則:括增作業項目間之邏輯關係


 

object tree

 


   

●方法主要包括--

  1. GetES

{
ResetValue(Global:EF);
Let[length LengthList(Self:Predecessor)]
If length == 0
Then SetValue(Self:ES,0)
Else
For i From 1 To length Do
{
Let[Name GetNthElem(Self:Predecessor,i)]
AppendToList(Global:EF,Name:EF);
Max(Global:EF);
};
};


  2. GetEF

{
SetValue(Self:slotname,Self:ES+Self:Duration);
Self:ES+Self:Duration;
};


3. GetLS

{
SetValue(Self:slotname,Self:LF-Self:Duration);
Self:LF-Self:Duration;
}


4. GetLF

{
ResetValue(Global:LS);
Let[length LengthList(Self:Successor)]
If length == 0
Then SetValue(Self:LF,Self:EF)
Else
For i From 1 To length Do
{
Let[Name GetNthElem(Self:Successor,i)]
AppendToList(Global:LS,Name:LS);
Min(Global:LS);
};};


  5. SetPredecessor

{
Let [length LengthList(Self:Successor)]
{ SetValue(Global:Successor,Self:Successor);
For i From 1 To length Do {
Let [temp GetNthElem(Global:Successor,i)]
If Not (Member?(temp:Predecessor,Self))
Then
AppendToList(temp:Predecessor,Self);};};}


   

預期使用者

  1.工程專案經理

2.工地主任


 

知識庫來源

  1.林耀煌•營建工程施工規劃與管理控制

2.葉怡成•電腦在營建管理上的應用


 

推理機制

  1.前向計算(Forward Pass):由起始作業項目 順向推算各作業項目之ES與EF,其中

(ES)i = MAX[(ES)i-1]
(EF)i = (ES)i + (Duration)i


  2.後向計算(Forward Pass):由結束作業項目 逆向回推各作業項目之LS與LF,其中

(LF)i = MIN[(LS)i+1]
(LS)i = (LF)i - (Duration)i


  3. 浮時計算:由各作業項目之ES、EF、LS、LF推算,

TFi = LSi - ESi = LSi - ESi
FFi = (MIN ESi+1)- EFi
IFi = TFi-FFi


  4.決定要徑:連接TF為0之作業項目即為要徑


 

系統特點

 
1.輸入簡便,只須輸入節點、作業項目與立即後續作業,不須額外 輸入前置作業,系統會自動計算(Method:SetPredecessor)
2.良好之人機界面,圖面式的輸入與輸出,與視窗形程式操作相仿


 

系統未來可能的改良與擴充

  1.由於時間因素,只發展至數值解,圖面輸出有待擴充

2.排程亦未完成

3.作業間邏輯關係之擴充,如允許虛作業(Dummy)加入

4.輔助說明


 

實例

 

Input

NodeDurationImmediateAfterID
A4B,C,D
B3E
C3E
D4F
E6G
F2G
G3-

 

Output

 

使用說明

  1.於主畫面中按下「Start」即開啟本程式


按下Start開啟本程式



  2.按下「Add Node」,即可輸入各作業項目之名稱、代號與工期


按下Add Node,即可輸入作業項目資料



 
3.依序填入個作業項目之名稱、代號與工期,每輸一個節點後按 「Add」加入該項資料;輸入起始及結束作業項目代號後按「OK」;;最後按「BACK」回主畫 面




  4.按下「ImmediateSuccessor」,即可輸入各作業項目之立即後續作業



按下ImmediateSuccessor,即可輸入立即後續作業



 
5.依序輸入各作業項目代號,並於右列視窗中選擇立即後續作業, 並按「Add」加入;按「BACK」回主畫面;按「RESET」可重新輸入。


  重新輸入
選擇立即後續作業後按ADD
依序輸入各作業項目代號
回主畫面


  6.按「Numerical」即可瀏覽計算結果之數值輸出部份


按Numerical可瀏覽結果



 

實例一

ActivityDurationImmediateAfterIDESEFLSLF
A5B,C0505
B4D,E5959
C3E5869
D2-9111113
E4-913913
F0-13131313

 

實例二

ActivityDurationImmediateAfterIDESEFLSLF
A1B,C0101
B8D,E1919
C3D,F1436
D1G9101718
E3G,H912912
F5G,I49611
G1J12131819
H1J,K12131213
I2J,L9111113
J1M13141920
K7M13201320
L7M11181320
M1-20212021



回上頁