[摘 要] 在求解大規模的車輛路徑問題時,首先需要將大規模復雜的配送網絡根據一定的約束條件并利用相應的方法劃分為若干個小規模的配送區域,而不同的配送區域的劃分方法對最后優化效果影響很大,本文從解決實際問題入手,首先明確了使用聚類算法進行配送區域的劃分可以使得到的區域比較緊密且更符合實際需求,然后分析了現有基于K-means聚類算法的優劣性,在此基礎上設計了一種新的配送區域均衡的劃分方法——改進的兩階段K-means聚類算法,并經過仿真實驗驗證了方法的實用性和有效性。
[關鍵詞] 物流配送; 區域劃分; K-means 聚類
doi : 10 . 3969 / j . issn . 1673 - 0194 . 2010 . 24 . 028
[中圖分類號]F274;F224.0 [文獻標識碼]A [文章編號]1673 - 0194(2010)24- 0060 - 04
1引言
物流配送區域的劃分是一個多約束、多目標決策的組合優化問題,屬于NP難問題[1],現行一般求解VRP問題的算法時間復雜度大都為O(n2),若按此計算規模為10 000個左右節點的車輛路徑問題預計至少需要數百小時,因此在求解大規模車輛路徑問題上需要尋找合適的解法。目前的解決思想是化整為零,各個擊破。即首先將大規模復雜的配送網絡根據一定的約束條件并利用相應的方法劃分為若干個小規模的配送區域,然后逐個求解小規模車輛路徑問題即在各子區域內設計最優配送路線,以此尋找到整個問題的近似較優解。
而在選擇劃分方法時,不同的配送區域的劃分方法對最后優化效果影響很大,所以確定一種比較合理的劃分算法對整個系統是非常關鍵的。目前配送區域劃分的主要方法有掃描法和聚類算法。掃描法的基本思路是采用逐次逼近的方法求解物流配送車輛調度問題,一般適用于客戶數目不太大且配送區域不多時;而當客戶網點數目較大且配送區域較多時,則采取聚類算法,把大量的d維數據對象(n個)聚集成k個聚類(k < n),使同一聚類內的對象的相似性盡可能最大,而不同聚類內的對象的相似性盡量達到最小。也就是說形成聚類之后,同一個聚類內的對象具有很高的相似性,而且與不屬于該聚類的對象有迥然的差異(即不相似)。由于聚類的特殊性,在物流系統中使用聚類算法進行配送區域的劃分可以使得到的區域比較緊密且更符合實際需求。
在進行聚類時,主要有以下幾方面需要考慮:
第一,聚類的數量。這是一個需要先行輸入的數值,需要考慮到實際情況,根據每天總的送貨量和單車容量進行計算得出。因為客戶的需求每一個周期是不同的,所以每個配送周期開始時都需要重新計算該值。
第二,每個聚類內點應該相對集中,這樣車輛就不會花費大量時間在行駛過程中。這也是聚類的基本原理之一。
第三,每個聚類的工作量應大體相當,這樣可以避免某配送車輛送貨格外少或者格外多的情況出現。
第四,每兩個聚類不能有重合,否則會發生重復送貨的情況;同理每一個點都必須包含在某一個類中。
第五,在實際應用中只考慮位于城區的客戶分布,對于位于郊區的客戶,可以利用城區的配送原理進行計算。
2基于GIS的兩點間最短距離的確定
GIS環境下針對配送道路路線進行規劃,將著重分析城市的道路網絡圖層,道路中兩個節點間的最短距離的求解就是基于這個圖層。在城市道路網圖層中進行最短路徑分析時,必須首先將現實中的城市道路網絡實體抽象化為圖論中的網絡圖的形式,然后通過網絡分析來實現道路網絡的最短路徑分析。在實際應用中,城市道路網的表現形式一般為數字化的矢量地圖,其網絡空間特征中的交叉路口坐標和道路位置坐標是在地圖上借助圖形來識別和解釋的,而為了能夠高效率地進行最短路徑分析,必須首先將其按節點和邊的關系抽象為圖的結構。這就需要對原始道路圖進行預處理,建立其相應的網絡拓撲關系。經過預處理后,當對城市道路網進行最短路徑分析操作時,系統就可以直接從拓撲信息表中提取道路網的網絡拓撲結構。將配送倉庫和每個客戶點之間的最短距離,以及每個客戶之間的兩兩最短距離都保存到數據庫中,為求解路徑規劃問題提供數據。
研究模型與GIS結合時最大的問題在于:不再只是計算兩兩配送點之間的直線距離,而是利用地理信息系統計算任意兩配送點間的實際路線距離以及這條最短路徑所經過的道路節點。
用G = [C′,E,V,W]表示網絡圖[2],其中:C′ = {0,1,2,…,n}為點集,0表示配送中心,其他點為客戶;V為路徑交點集合;E = {(i,j) | i,j = 0,1,2,…,n,且i≠j}為弧集,表示車輛可能走過的路線段集合;C = {cij | (i,j)∈A}為距離矩陣,cij表示經過對應弧段 (i,j)的長度;W為正的實數集(W∶ E → IR+),表示對應邊的權值。圖G的一個邊序列{ei,ei+1,…,ej}或者說一個點序列{c′i,c′i+1,…,c′j}稱為圖從點c′i到點c′j的一條路徑。在點c′i到點c′j所有路徑中,權W(c′i,c′j)最小的路徑稱為最短路徑。
無論是距離最短、時間最快還是費用最低,它們的核心算法都是最短路徑算法。在這里假設道路的通行質量是相同的,而且不隨時間變化。那么,行車時間和距離之間就存在著簡單的正比關系。要計算兩點之間的行車時間,只要知道兩點之間的距離就可以了。這樣問題就集中在求兩點之間的距離。兩點之間的距離是指兩點之間最短路徑的長度,兩點之間的路徑可以有很多條,在安排行車路線的時候,必須保證車輛走最短的路程,這是總成本最低的保證,同時也是總路徑最短的保證。那么求解任意兩點之間的最短路徑就成了解決物流路徑規劃問題的基礎。
3目前主要的K-means聚類劃分方法分析
3.1K-means算法簡介
K-means 算法是聚類思想中最早出現的算法之一,思想很成熟。它接受輸入量 k,然后將n個數據對象劃分為k個聚類以便使得所獲得的聚類滿足:同一聚類中的對象相似度較高;而不同聚類中的對象相似度較小。聚類相似度是利用各聚類中對象的均值所獲得一個“中心對象”來進行計算的。K-means算法由于技術成熟,簡單易懂,在數據挖掘中被廣泛應用,在實際應用中涉及聚類的也大多選用該算法。
3.2Weighted-K-means算法
文獻[3]提出了Weighted-K-means算法這一改進方法。該方法根據物流配送中的實際情況,給每一點都賦以各自的權重。在聚類的時候,將每一類的權重作為一個約束條件,從而使得每一個類的權重大體相等。該算法的主要思想是:假設在做距離比較時不再采取1∶1的比率,而是采用和權重有關的度量方式,假定點di其到聚類Ck中心ck的劃分距離為:
上式中,xk和yk是聚類中心的坐標,weight(Ck)表示對點集合Ck求其總權重。γ稱之為權重衰減系數。可見到,當γ為0的時候,上式和普通聚類的劃分距離公式其實等價。可以將不考慮權重的K-means聚類認為是權重衰退系數為零的Weighted-K-means聚類。
Weighted-K-means方法的優點十分明顯:首先,權重作為外部約束條件進行約束,聚類劃分的次數會大大減少。而且這樣進行的聚類得出的結果更好。其次,在實際問題中,權重的引入限制了每個聚類的送貨量,可以平衡各個聚類之間的工作,提高配送效率。
該方法也有一些不足:第一,雖然時間復雜度和原始的K-means算法一樣,都是O(nkt)這個數量級(k為聚類個數,n為參與的點數,t為迭代次數),但是Weighted-K-means的距離公式較為復雜,如果和適當的初始點選擇算法配合的話,每次運算的時間也會比較長。第二,算法的魯棒性有待研究。該算法由于沒有在實際中運用過,現實中的問題對它會產生怎樣的影響還不確定,而各種可能出現的問題會對它的聚類結果產生不良影響。
3.3基于均衡化函數的K-means算法
文獻[4]中提出了一種基于K-means算法的改進算法——基于均衡化函數的方法。在這種算法中,初始中心點是根據密度定義的。基于密度的初始化中心點算法的基本思想是從樣本數據庫中搜索出高密度集點Hd,然后在Hd中利用貪心算法搜索散布較大的中心點集M。定義如下:
已知樣本事務數據D = {x1,x2,..,xn},其中,對象Xi的密度記作density(Xi),即density(xi) = |{x∈D| dist(xi,x) ≤ R}|
其中,density(xi,x)表示對象xi和x的距離;R代表半徑,且半徑的確定問題較為困難,過大或過小均不能獲得有效的密度估計,本文采用如下鄰域半徑公式:
其中,mean(D)表示所有對象間距離的平均值;n是對象數目;coefR是鄰域半徑調節系數,0 < coefR < 1,經驗表明,coefR = 0.13時,聚類效果較好。
該算法的主要優點如下:初始點根據密度進行選擇,可以消除傳統算法中隨機性對聚類結果的影響。另外,均衡化函數能很好地反映出類內差異和類間差異的關系,使得聚類的質量有很大提高。但它也存在一些不足,例如初始點的選擇利用密度函數計算十分復雜,需要遍歷每一個點,每收集一個初始點就要對高密度點集Hd進行一次遍歷,這會消耗大量的時間。另外該方法也沒有考慮到外部約束的問題,使各配送區域間的工作量無法均衡,使聚類結果更加符合實際配送工作要求。
3.4有彈出點機制的K-means算法
有彈出點機制的K-means改進算法的基本思想是在進行一次傳統的K-means之后,計算每個聚類的送貨量是否超過規定的載貨量,如果超出則彈出其中一個點,這個點通常選擇距離聚類中心最遠的點。然后再次進行聚類和衡量,不斷進行這個過程直到沒有點被彈出為止。為了防止一個點總是被彈出,該方法對被彈出一次的點加以標記,下次再遇到則不處理該點。
該算法的優點在于考慮了權重因素,并且對聚類內點的調整給出了一種方案,在實際應用中可以根據實際情況進行調整。該方法的缺點在于在防止節點多次被彈出的時候,使用了一個記錄表來記錄一個節點是否已經被彈出,而被彈出的節點可能是次遠的節點。這樣就可能導致聚類交叉的現象,導致實際中會使得車輛走冤枉路,兩輛或者多輛車子會走同一條路。為了防止聚類抖動,強制制定了被彈出節點不能再次被彈出的規則。雖然可以通過這條規則防止聚類抖動,但是在最壞情況下,所有點都被彈出后,則聚類恢復為普通K-means聚類,并不會帶來任何改進。
4兩階段的K-means算法
綜合上述3種改進算法,本文提出了一種新的改進算法。
圖1為傳統K-means算法的詳細流程,由聚類過程可以看出,傳統K-means存在一些不足:
首先,它的初始點是隨機選擇的,這就有可能導致收斂速度過慢;其次,它的聚類完全是空間距離上的考慮,沒有任何實際因素的影響;第三,原始的K-means算法沒有任何約束條件,不能靈活地依據各種限制進行調整。
對應到實際問題中,這幾點不足體現為:第一,初始點如果隨機選擇,有可能集中在某一區域內,要將所有點都加入這些聚類并達到收斂條件很難;第二,這里關注的只是每一個點的經緯度,其他指標都被忽略了,而在實際問題中,載貨量、時間等因素都是需要考慮的;第三,這一算法并不能滿足每一個劃分的工作量均衡的要求。
針對這幾點不足,對K-means算法進行了如下改進。
4.1兩階段的K-means算法思想
從所配送客戶的大致分布和實際路況來看,客戶分布有明顯的集群特點,而且在配送過程中,對每個區域的工作量有一定的限制,例如運輸量、總時間等。為了滿足在實際配送過程中需要滿足的約束條件,本文對K-means算法進行了擴展和改進。
改進后的算法中,整個聚類過程被分為兩部分:第一部分就是傳統的K-means聚類過程,經過數次迭代,將對象點劃分為k個類。每個類內部的點之間相似性較高,而類與類之間的點相似性盡可能低;第二部分是調整過程,利用給定的工作量衡量指標,對第一部分完成后形成的k個聚類進行調整,最終目的是使各個類的工作量大致相同。關于不合格點的彈出,利用標識機制對其進行標識,使得每一個點只有一次被彈出的可能,從而防止了無限次循環迭代,最終導致算法不收斂的情況發生。映射到實際工作中,第二部分的目的就是每個配送區域的工作時間大致相同,工作量基本持平。
改進的K-means算法流程見圖2,可以看出到第4步的時候,傳統意義上的聚類迭代過程已經結束。接下來的步驟是用來根據對工作量指定的衡量指標進行調整,以達到各個類之間工作量相對均衡的狀態。
4.2改進的兩階段K-means算法
兩階段的K-means算法的具體實現步驟如下:
4.2.1初始k值確定
對于初始k值,按照如下公式確定:
k = Q / q,其中Q表示這一配送周期中,需要配送的總量。q表示每輛車的最大載貨量。
4.2.2初始聚類中心的確定
選擇合適的初始點可以使算法快速收斂,而不恰當的選取會大大延長運行時間。初始點的選擇常用方法有兩類:隨機選擇法和最大距離選擇法。
隨機選擇法是根據最終聚類中心的個數k來隨機選擇k個節點作為初始的聚類中心。傳統的K-means算法就是從n個數據對象中任意選擇k個對象作為初始聚類中心的。這種方法簡單容易實現。但是具有以下缺點:
(1) 節點的選擇完全隨機,碰到初始節點過于集中的可能性很大。這樣距離收斂的速度過慢,甚至可能不收斂。
(2) 因為節點的選擇隨機,所以節點稀疏的地方被選出初始節點的概率太小,可能使節點分布不均勻,也不利于聚類收斂。
而最大距離選擇法基于這樣一種假設:聚類初始點之間距離越遠,聚類收斂越快。因此在初始點的選擇上,就要盡量拉開彼此的距離。它主要包括邊緣選擇法和均分選擇法兩類。
這兩種方法的收斂效果很接近,由于實際情況中的點分布聚集性較為明顯,且大部分都在區域內部,因此采用均分選擇法。
均分選擇法的思想是:假如需要初始點的個數k = pxq,則將整個地圖劃分為p行q列,初始節點選在每一個區域的正中心附近的節點。這樣每個節點之間的距離接近于均勻,有利于聚類收斂,而且不會形成很明顯的分布不均勻的起始狀態。初始k值和聚類中心的確定流程如圖3所示。
4.2.3計算距離
K-means要求第二步對于除了聚類中心以外的其他對象,根據它們與這些聚類中心的相似度(距離),分別將它們分配給與其最相似的(聚類中心所代表的)聚類。
在計算距離的時候需要結合實際情況來考慮。在實際運輸過程中,并不是單純利用歐氏距離公式來進行計算的,因為有些點雖然幾何距離很近,但之間沒有路可達,這樣即使被分到一個聚類中也不能因此提高配送效率。所以在實際操作時,采用數據點映射的方式把所有的數據點都標在實際地圖上,利用地圖上的城市公路信息計算兩點間的距離。主要思想是在GIS中將點映射到實際地圖上之后,標注上一步確定好的聚類中心,在聚類中心鄰域內選擇距離最近的公路上的一點,遍歷所有點并對每一個非中心點計算它到k個聚類中心的實際道路距離;在計算得到的k個距離中,選擇最小的一個di,加入該對應聚類,直到所有點都劃分進某一個類。
4.2.4第一階段收斂性檢驗
K-means算法要求在第三步計算每個所獲新聚類的聚類中心(該聚類中所有對象的均值);不斷重復這一過程直到達到收斂條件。對于上述步驟運算得到的k個聚類進行檢驗。如果已經滿足收斂條件,則繼續第二階段的調整;如果不滿足,則根據重心法重新計算聚類中心,再次聚類,不斷迭代,直到算法收斂為止。
第一階段的收斂準則是:第m次聚類的結果和第(m - 1)次結果相比,沒有任何變化。包括聚類中心穩定,構成各個聚類的點集不再變化。
4.2.5均衡指標計算
首先,需要計算均衡工作量指標Ti,這一指標的現實意義是幫助各個聚類之間實現工作量的均衡。Tj代表第j個聚類的Tarea值。從計算出的k個T中,篩選出最大值Tm和最小值Tn,由于劃分的目的是每個配送區域工作量均衡,也就表示要將最大值Tm和最小值Tn的差控制在合理范圍之內,ε表示可接受的殘差,該數值是在運算前人工輸入的且取值大小取決于可接受的工作量差異。
因此,第二步的收斂條件為||Tm - Tn|| ≤ ε。當這個條件滿足時,就表示現在的區域劃分能夠滿足工作量基本均衡的條件,而且第一步聚類也滿足了能使客戶安排相對集中,送貨效率較高的要求。如果不滿足上述收斂條件,也就是有的區域工作量過大,就需要進行如下的調整。
4.2.6點集的調整
如果前一步的檢驗沒有通過,那么就需要對現在的聚類結果進行一些調整,|| Tm - Tn || ≤ ε不成立意味著在此時的聚類中,工作量極差較大。也就是說,有些配送區域的送貨時間過長,而有些則只要很短的時間就可以完成任務,而希望的結果是各個配送區域需要的配送時間基本相等。因此采取如下調整方法:在有最大T值Tm的點集中選取與聚類中心距離最遠的那個數據點,并將其彈出該聚類,這樣該聚類的T值就會下降。同時將彈出的點加入到另一個聚類中,此時從該點的k個dj中選擇次小的,找到該距離對應的聚類中心,將這個點加入到該聚類中心所在的數據類中。
為了防止某一個數據點被反復彈出,因此對被彈出的點加以標記,當下次掃描又需要該點彈出時識別到特殊的標記,則對該點不予處理,轉而彈出聚類中次遠的點。這種機制可以防止某一點無法加入任何一個聚類,也就是說不會出現為某一家客戶單獨送貨的情況。
4.2.7重新迭代
在對點集進行調整之后,有兩個類的T值發生了改變,對這兩個聚類重新計算T值再次檢驗;然后不斷迭代,直到所有配送區域間的工作量指標都基本均衡,極差也處在可接受的范圍之內;這時停止迭代,將聚類結果以點集形式輸出。
兩階段的K-means算法的具體步驟總結如下:
Step 1:選取k個初始節點作為聚類中心。
Step 2:在GIS中計算每一個點與k個聚類中心的距離。(xk,yk)用于標記某個中心點坐標,(xi,yi)為第i個點的坐標。在這里坐標值是用點的經緯度表示的,并存儲在數據庫表中。
Step 3:對于每一個非中心點,在計算出的k個距離中選擇最小的一個,并將該點加入對應類。
Step 4:通過K-means算法進行聚類,得到k個聚類。計算每一個聚類T值,Tj為配送區域內總工作時間,j取值為1,2,…,k。N1為配送區域內電子結算客戶數量,N2為配送區域內非電子結算客戶數量。D1為配送車輛由配送中心到第一個客戶的距離加最后一個客戶到配送中心的距離,D2為配送車輛配送過程中經過的各配送點的距離和。
Step 5:對Tj進行排序,得到max Tj = Tm,min Tj = Tn。其中m,n∈(1,2,…,k)。
Step 6:輸入殘差ε,設定收斂條件為|| Tm - Tn || ≤ ε,若符合則結束;否則下轉第7步。
Step 7:將第m類中距中心最遠的點彈出并加以標記,在今后的循環迭代中遇到此標記則不予處理,而轉向處理次遠的點。將該點加入到除m外距它最近的類中,重新計算Tk。轉向Step 5繼續檢查,直至收斂。
5結論及展望
兩階段的K-means改進算法是對傳統K-means以及一些改進算法的綜合與改進,它克服了傳統K-means不夠靈活和無法添加外部約束的缺點,結合了集中改進算法中關于權重、均衡、彈出點機制、添加外部約束條件等思想,同時根據實際情況給出了初始聚類個數k的確定方式以及聚類中心的確定。具體的主要優點如下:
第一,在初始點的選擇上摒棄了傳統的隨機選擇方式,而采用網格式選擇。雖然這種方法比隨機選擇要復雜,但是它能夠使初始點分散,使算法更容易收斂,同時防止出現初始點過于密集的情況。
第二,算法更容易實現。在第一階段迭代過程中,采用的是經典的K-means算法。像K-means這樣比較成熟的算法,已有固定的實現模式,因此實現起來比較方便。
第三,在第二階段引入了外部調整量T來衡量各個聚類的工作量,以保證每個配送區域所需要做的工作量大致相同。衡量指標的各個系數則是通過數據統計分析總結而來,該指標源自實際數據,在應用中更加可靠。
同樣,該算法也存在幾處需要繼續研究和改進的方面:
第一,停機準則中殘差ε的確定需要繼續研究,太嚴則可能算法無法收斂,太寬松則聚類效果有可能不夠好。
第二,這種方法對點分布較為平均的情況更加實用,如果點的分布具有較強的集中性特征,則效果可能不如利用密度聚類。
第三,該算法并未對道路約束條件進行考慮,需要進一步實驗和改進。
主要參考文獻
[1] K M Van Hee. Information System Engineering: A Formal Approach [M]. NewYork,NY:Cambridge University Press, 1994.
[2] 史亞蓉,萬迪昉,等. 基于GIS的物流配送路線規劃研究[J].系統工程理論與實踐,2009,29(10):76-84.
[3] 謝可.物流配送系統中聚類算法的研究與應用[D]. 杭州:浙江大學, 2006.
[4] 錢雪忠,施培蓓,張明陽,汪中.基于均衡化函數的k均值優化算法[J].計算機工程, 2008,34(14) :60-62.