• 沒有找到結果。

導引式路徑構建機制

在文檔中 Delivery Problem with Time Windows (頁 73-79)

第四章 調適型導引螞蟻演算法

4.1 導引式路徑構建機制

GAACS 演算法與 AACS 演算法使用的路徑構建機制,有兩個主要的差 異,其一為螞蟻構建路徑的方式;其二為演算法使用關連式旅行網絡結構。

一、螞蟻構建路徑方式的差異

AACS 演 算 法 中 的 路 徑 構 建 方 式 是 以 鄰 近 點 插 入 法 (Nearest Inserting Method)為基礎,設計螞蟻前進機制,求解 TSP 問題,所以無 須選擇作業加入路徑中的最適位置。因為應用 AACS 演算法求解 TSP 問題時,每隻螞蟻起始的可行路徑構建方法,是以目前路徑最尾端的作 業點為起點,應用機率分配的方式(式 2.25),找一個最適合前進的作業 點 i 加入路徑最尾端,當螞蟻前進到作業點 i 時,作業點 i 即為目前路 徑的最尾端作業點,在作業點 i 之前的路徑皆為固定,然後再從點 i 開 始,以點 i 為起點,應用機率分配的方式(式 2.25),找一個最適合前進 的作業點加入路徑中,如此反覆作業,直到螞蟻行經所有作業點後,該 螞蟻即完成一條可行路徑的構建作業。

鄰近點插入法並不適用於求解 SPDP 問題,因為 SPDP 問題由於每 一項需求作業皆包括一組收貨作業以及卸貨作業,因此構建可行路徑過 程中,將子作業加入路徑時,必須同時考慮兩個子作業插入的位置,且 由於各子作業點間有不同的連結關係(請參考關連式旅行網絡結構),子 作業可能加入路徑中的任何位置,因此,本研究修改 AACS 中螞蟻搜 尋前進作業點之機制,改以最小成本插入法為基礎,設計適合用來求解 SPDP 問題的可行路徑構建作業。

二、演算法使用的成本表差異

本研究將PDPTW 問題轉換為 SPDP 問題,求解過程中使用關連式 旅行網絡結構,螞蟻搜尋可行路徑的方式與使用傳統旅行成本矩陣時並 不相同,如圖4.2 所示,螞蟻搜尋可能繼續服務的作業的過程中並不存 在任何與作業服務時間窗相關的運算步驟。圖4.2 中「利用關連式旅行 網絡結構表構建可行路徑T」的方式,請參考 3.4.4.1 小節中以表 3.13 為例所敘述的作業步驟;而各作業插入方式與機率值的計算方式(圖 4.2

起始參數設定

需求 作業集合 (S

J

)為

空集合 ?

可行解路徑 (T)存在?

從 S

J

中任選一需求 作業 J

i

更新可行路徑 T的 車輛載貨量與服

務總時間資料 將需求作業 J

i

從 S

J

中刪除

利用非對稱關聯式旅行成本 表,搜尋路徑 T中各路段或路段

間可插入的作業,計算各作業 的插入機率值,並加入 H集合中

將可行路徑 T加 入 St集合中

刪除可行路徑 T 將 H集合中所有元素由小

至大排序,並計算各元素 的累積機率密度值 隨機產生一個介於 0與1之

間的常數 (q)

選擇 q值落入的累 積機率密度空間 所對應的元素所 代表的作業組加 入路徑中,插入 後路徑為 T'

更新 T=T'

輸出 St集合與 可行解目標值 否

是 否

可行解 路徑 T存在且只有1

組作業 ?

將可行路徑 T加 入 St集合中 是

停止

更新可行解 目標值

還原 H為空集合 i等於插入的子作業組所屬

的需求作業的編號 利用非對稱關聯

式旅行成本表構 建可行路徑 T

H為 空集合 ?

q < q

0

? 選擇 H中最後一

個元素所代表 的作業組加入 路徑中,插入 後路徑為 T'

是 否

  圖4.2 一隻螞蟻出發構建可行路徑的作業流程圖

表4.1 符號定義表 符號 定義

n 需求作業數量

l( )

I t

η

Δ 第t 回合時將需求 l 的收、卸貨作業點同時且依序插入節線 I 後,

意念函數的變量

l

dI

Δ 需求l 收卸貨作業點同時且依序插入節線 I 後,路徑成本的變量

l

pI

Δ 需求l 收卸貨作業點同時且依序插入節線 I 後,特徵懲罰值變量

l ( )

IJ t

η

Δ 第t 回合時將需求 l 的收、卸貨作業點依序插入節線 I 與 J 後,意 念函數的變量

l

dIJ

Δ 需求l 收卸貨作業點依序插入節線 I 與 J 後,路徑成本的變量

l

pIJ

Δ 需求l 收卸貨作業點依序插入節線 I 與 J 後,特徵懲罰值的變量 i1 與 i2 i1 與 i2 表示節線 I 的兩個端點,服務順序 i1 在 i2 之前,相同

的,j1 與 j2 表示節線 J 的兩個端點,服務順序 j1 在 j2 之前。

Jl 編號l 的需求作業的收貨作業 Jl+n 編號l 的需求作業的卸貨作業

S 螞蟻 k 當下能選擇加入路徑中的所有需求作業的集合(滿足作業點 服務時間窗限制、容量限制與總作業時間限制的需求作業)

)

,

( t

P

IkJ 螞蟻k 在第 t 回合時將作業點 l 插入節線 I,且將作業點 l+n 插入 節線J 的適合度機率分配

) (t

PIk 螞蟻k 在第 t 回合時將作業點 l 與作業點 l+n 同時插入節線 I 的適 合度機率分配

一、GAACS 演算法意念函數

AACS 演算法中螞蟻構建路徑時,選擇最適合加入路徑中的作業 時,主要取決於各作業的前進機率值,計算方式如式(2.21)所示,需要 同時考慮路段費落蒙濃度與路段意念函數,但是路段意念函數值為路段 成本的倒數,在求解過程中始終是固定不變的,不似路段費落蒙濃度會 隨著演算過程累積接資訊,逐漸突顯出最佳路徑資訊。

再者,從GLS 的效用值函數公式(式 2.20 )與擴增目標函數(式 2.18) 明顯可以發現,可行解中路段成本愈高,且未被懲罰過的路段,愈容易

被懲罰,而被懲罰的路段則會增加擴增目標函數的成本,造成後續搜尋 可行解的過程中,將會盡可能的避免選擇到被懲罰過的路段,即可以避 免將成本較高的路段加入可行解中。

有鑑於此,本研究導入 GLS 懲罰解特徵的導引概念,延伸至 AACS 演算法的前進機制中的意念函數,藉由懲罰機制,來增加部分較 差或曾經行走過的路段的成本,即可使路段意念函數也能累積可行解資 訊,且與路段費落蒙濃度所累積的資訊並不相同,因為,路段費落蒙濃 度累積的是較佳較建議行走的路段,而路段意念函數則是紀錄較差且建 議避開的路段。

GAACS 演算法的前進機率值計算方式與 AACS 雷同,唯一的差異 僅在於意念函數的設計方式,設計概念如式(4.1),詳細計算公式請參考 式 4.2)、式(4.3)所示,加入 GLS 中懲罰的概念,使得成本愈高的路段 的前進機率值愈小,以避免將成本較高的路段加入可行解中。

1/( d p)

η λ

Δ = Δ + ⋅ Δ (4.1)

其中 △ŋ 為 GAACS 演算法意念函數

△d 為路段成本總變量

△p 為特徵懲罰值總變量

總變量指的是(新路徑成本-舊路徑成本)的成本變量。應用最小成本 插入法求解SPDP 問題時,可能將需求 l (包括收貨作業 Jl 與卸貨作業 Jl+n )同時插入一條路徑(節線)中,也可能個別插入不同路徑(節線)中,

不同的插入法,△ŋ 、△d 與△p 的計算公式亦稍有差異。

(一) 需求 l 同時插入一條路徑( 節線 i )

( ) 1/ ( )

I I I

l

t d

l

p

l

η λ

Δ = Δ + ⋅ Δ

(4.2)

其中 I

l

i1, l l, l+n l+n, i2 i1, i2

d d + d + d - d Δ =

I

l

i1, l l, l+n l+n, i2 i1, i2

p p + p + p - p

Δ =

(二) 需求 l 插入不同路徑( 節線 i 與 節線 j )

( ) 1/ ( )

IJ IJ IJ

l

t d

l

p

l

η λ

Δ = Δ + ⋅ Δ

(4.3)

其中 IJ

l

i1, l l, i2 i1, i2 j1, l+n l+n, j2 j1, j2

d = d + d - d + d + d - d Δ

IJ

l

i1, l l, i2 i1, i2 j1, l+n l+n, j2 j1, j2

p = p + p - p + p + p - p Δ

二、GAACS演算法前進機率值

SPDP 問題中選擇適合加入路徑中的作業時,需同時考慮收貨作業 以及卸貨作業的合適程度。然而收、卸貨作業是否以「連續服務」的方 式加入路徑中,與計算路段意念函數時相同,在適合度計算方式時,亦 會稍有不同,如式(4.4)與(4.5)所示。使用符號定義列於表 4.1,作業選 擇方式如圖4.3 所示,亦為圖 4.2 中以虛線匡起處的詳細作業步驟。

(一) 需求 l 插入一條路徑( 節線 i )

兩個作業點以連續服務的方式加入現有路徑中,只可能在現有 路徑中選擇任一條節線 i 插入該需求作業,且收貨作業必須在卸貨 作業前完成,因此本研究另外以PIk(t) 表示螞蟻 k 在第 t 回合時將 作業點 l 與作業點 l+n 同時插入節線 I 的適合度機率分配,計算方 式如式(4.4)所示。

1, , , 2 1, 2

( ( )) ( ( ))

( ) [( ( )) ( ( )) ]

( ) ( ) ( ) ( ) ( )

l l

k I I

I

h h

I I

h S

l

I i l l l n l n i i i

t t

P t

t t

t t t t t

α β

α β

τ η

τ η

τ τ τ τ τ

+ +

Δ Δ

=

Δ Δ

Δ = + + −

其中

(4.4)

(二) 需求 l 插入不同路徑( 節線 i 與 節線 j )

收、卸貨作業以不連續服務方式加入螞蟻 k 當下所行走的路 徑,收貨作業l 插入節線 i,卸貨作業 l+n 插入節線 j,如式(4.5)。

( ( )) ( ( ))

( )

[( ( )) ( ( )) ]

α β

α β

τ η

τ η

Δ Δ

=

Δ Δ

l l

k IJ IJ

IJ

h h

IJ IJ

h S

t t

P t

t t

(4.5)

1, , 2 1, 2 1, , 2 1, 2

( ) ( ) ( ) ( ) + ( ) ( ) ( )

其中 Δ

τIJl

t

= τi l

t +

τl i

t

τi i

t

τj l n+

t +

τl n j+

t

τj j

t

 

分析可行路徑T中服務的 需求作業數量(x) 令I=1

計算 P

hI

後與T' 一併加入H集合

I=I+1

I >2x+1?

從TS

T(I)

與FS

T(J)

中篩選出可插入 路徑T中第I條路段的需求作業

加入集合N中(令n=1) 利用非對稱關聯式旅行成本結 構表產生從路徑T中第I個子作 業出發可直達的子作業集合 TS

T(I)

與可直達路徑T中第J個子

作業的子作業集合FS

T(J)

令J=I+1,TS

T(I)

=FS

T(J)

=N={ ? }

從TS

T(I)

∩FS

T(J)

與TS

T(I+1)

∩FS

T(J+1)

中篩選出可將收貨子作業插入路 徑T中第I條路段,並將對應的卸 貨子作業插入第J條路段的需求作 業組合(須考慮車容量限制)加入集

合N中(令n=1) 令I=1

計算 P

hIJ

後 與T'一併加 入H集合

I=I+1

I >2x?

利用非對稱關聯式旅行成本結 構表將N中第n個需求作業(h)所 產生的子作業(最適合的一組)加 入路徑T,並產生新路徑T'

利用非對稱關聯式旅行成本結構 表將N中第n個需求作業(h)所產生 的的收、卸貨子作業(最適合的一 組)分別加入路徑T的第I條與第J條

路段中,並產生新路徑T'

令J=I+1,N={ ? }

排序H中所有的P

hI

與P

hIJ

值,

並計算各P值的累積機率密度值

停止

否 是

是 T' 存在?

n>|N|?

n=n+1

是 否

否 是

J=J+1,

N={ ? } T' 存在?

J >2x+1?

是 否

隨機產生q

0

選擇q

0

所對應的P值

屬於P

hI

將作業h的收、卸貨 作業依序插入節線I

將作業h的收貨作業 依序插入節線I、卸 貨作業插入節線J

是 否

  圖4.3 GAACS 前進機制中選擇插入作業的流程圖

三、參數變動機制

GAACS 中參數

α

與參數 β 的設計方式與 AACS 相同【2】,應用 AACS 求解 TSP 問題時已知

α

變動策略的績效最佳,因此求解 SPDP 問題時亦延續採用

α

變動策略,設計GAACS 演算法。

計算作業點插入機率值時,要特別注意,並非是計算 SPDP 問題各 個子作業的插入機率值,而是針對作業點來計算(原 PDPTW 問題中的 作業點),所以儘管 SPDP 中的子作業決策變數倍增於原 PDPTW 問題 中作業點決策變數,卻完全不會增加機率值的計算步驟。

在文檔中 Delivery Problem with Time Windows (頁 73-79)