要徑排程法
簡介
一般營建工程所須考慮之三大要素為:工期、成本與品質,其中以工期一項最為重要,
因為工期延誤不但會因工程契約而增加額外的工程成本,倘為營利性建物,則直接延後
其報酬回收的時間;另外在工期耽延的壓力下趕工,更會影響工程的品質。因此土木工
程師需對工程的工期與排程作一稹密的規劃。要徑法(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
Node | Duration | ImmediateAfterID |
A | 4 | B,C,D |
B | 3 | E |
C | 3 | E |
D | 4 | F |
E | 6 | G |
F | 2 | G |
G | 3 | - |
Output
使用說明
1.於主畫面中按下「Start」即開啟本程式

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

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

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

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

重新輸入
選擇立即後續作業後按ADD
依序輸入各作業項目代號
回主畫面
6.按「Numerical」即可瀏覽計算結果之數值輸出部份

按Numerical可瀏覽結果
實例一
Activity | Duration | ImmediateAfterID | ES | EF | LS | LF |
A | 5 | B,C | 0 | 5 | 0 | 5 |
B | 4 | D,E | 5 | 9 | 5 | 9 |
C | 3 | E | 5 | 8 | 6 | 9 |
D | 2 | - | 9 | 11 | 11 | 13 |
E | 4 | - | 9 | 13 | 9 | 13 |
F | 0 | - | 13 | 13 | 13 | 13 |
實例二
Activity | Duration | ImmediateAfterID | ES | EF | LS | LF |
A | 1 | B,C | 0 | 1 | 0 | 1 |
B | 8 | D,E | 1 | 9 | 1 | 9 |
C | 3 | D,F | 1 | 4 | 3 | 6 |
D | 1 | G | 9 | 10 | 17 | 18 |
E | 3 | G,H | 9 | 12 | 9 | 12 |
F | 5 | G,I | 4 | 9 | 6 | 11 |
G | 1 | J | 12 | 13 | 18 | 19 |
H | 1 | J,K | 12 | 13 | 12 | 13 |
I | 2 | J,L | 9 | 11 | 11 | 13 |
J | 1 | M | 13 | 14 | 19 | 20 |
K | 7 | M | 13 | 20 | 13 | 20 |
L | 7 | M | 11 | 18 | 13 | 20 |
M | 1 | - | 20 | 21 | 20 | 21 |
回上頁