CTOP問題:Bi-level Filter-and-Fan method

1.引言

標準車輛路徑問題VRP是把給定的全部顧客指派到對應車輛/載具,肯定車輛訪問顧客的順序,使得車輛的行駛里程最小。但在實際應用中,因爲資源有限或操做受限等緣由,只有一部分顧客可以被服務或訪問。這類問題可建模成:給定顧客集合,考慮選擇其中的一個子集進行訪問,在知足車輛某些運營條件下優化特定目標。Team Orienteering Problems(TOP)就是這樣一類問題,其優化目標是:在知足車輛行駛時間不超過給定閾值前提下,最大化訪問的顧客的總收益。另外一種問題爲Profitable Tour Problem(PTP),其優化目標爲最大化淨收益=收益-行駛費用(和行駛距離相關)。考慮車輛容量約束時,TOP的變體就是Capacitated Team Orienteering Problem(CTOP)。相似地,考慮車輛容量約束的PTP爲Capacitated Profitable Tour Problem(CPTP)。算法

因爲TOP是NP-hard的組合優化問題,精確算法在求解大規模問題時比較吃力。本文提出一個通用、新穎的雙層啓發式算法來求解CTOP:上層經過Filter-and-Fan方法肯定要訪問的顧客子集來最大化總收益;下層經過變鄰域降低(Variable Neighborhood Descent)算法來最小化車輛的總里程。Filter-and-Fan方法結合了禁忌搜索和filter-and-fan Search策略,考慮大鄰域結構和多條搜索路徑來克服局部最優性。本文提出的Bi-level Filter-and-Fan方法要優於已有的求解CTOP的啓發式算法,且在大規模CTOP測試用例上表現出色:可以在較短的計算時間內改進當前已知的最優解。數據結構

CTOP能夠用一個徹底無向圖<N, A>表示,N = {0, 1, 2, . . . ,n}爲顧客/節點集合,0表示倉庫,$N_c$ = N\{0}爲可能訪問的節點集合,每一個節點有事先定義好的收益$p_i$、服務時間$s_i$、非負需求$d_i$。多線程

每條弧(i,j)∈A都對應一個非負費用$c_{ij}$,$c_{ij} = c_{ji}$。共有K輛徹底相同的車輛,容量爲Q,從倉庫出發訪問完節點後最終會到倉庫。整數規劃形式以下框架

image.png

變量$x_{ijk}$ -車輛k是否通過弧(i,j),表示車輛k的訪問路徑。變量$y_{ik}$-車輛k是否訪問節點i。函數

約束(2)表示一共有K輛車離開倉庫,又返回到倉庫,限制車輛的總數;測試

約束(3)限制每一個節點最多被訪問一次;優化

約束(4)保證車輛k行駛路徑的連通性,若是車輛k訪問節點i,那麼車輛k必定通過某條邊到達節點i、必定通過某條邊從節點i出發;spa

約束(5)限制車輛k的行駛總時間不超過給定閾值T;線程

約束(6)限制車輛k的裝載量不超過其容量Q;設計

約束(7)限制車輛k訪問的路徑中沒有子迴路;

約束(8)限制變量$x_{ijk}$ 、$y_{ik}$爲二元變量。

上述整數規劃中變量個數隨問題規模增長而快速增長:$x_{ijk}$個數爲O($n^2$K)、$y_{ik}$個數爲O(nK)。

3.求解方法

3.1總體求解框架

本文將CTOP分解爲一個主問題-揹包問題(knapsack problem),子問題-有容量限制的車輛路徑問題(CVRP)。主問題肯定要訪問的節點子集來最大化總收益,子問題對於給定的節點集合,肯定車輛路徑即車輛訪問節點順序,來最小化車輛總里程。基於此分解思路,設計雙層搜索方法Filter-and-Fan method來求解CTOP。
image.png

首先,經過啓發式方法構造初始可行解;而後,使用禁忌搜索(Tabu Search)從初始可行解出發獲得局部最優解;其次,使用filter-and-fan Search對局部最優解進行改進,獲得新的局部最優解;而後對新的局部最優解重複Tabu Search、filter-and-fan Search步驟,直到不能被改進爲止。整個求解框架重複、交替進行禁忌搜索(Tabu Search)和filter-and-fan Search,直到局部最優解不能被改進,返回獲得的局部最優解。 Bi-level指的是在禁忌搜索和Filter-and-Fan Search中使用變鄰域降低算法VND。

3.2構造初始可行解:並行貪婪插入

以倉庫爲中心,T/2爲半徑的圓內全部節點爲選中的節點,將這些選中的節點按照收益從高到低排序。對每一個節點,考慮在每輛車可行的插入位置。迭代地,依次將選中的節點插入到費用最小的位置上,這裏費用最小(即「貪婪」)包括兩個方面:一方面指車輛的總行駛時間儘量短,另外一方面指車輛的行駛距離儘量短。直至選中的節點都安排到車輛路徑中。初始可行解即爲K輛車的訪問路徑。

3.3上層搜索策略:收益最大化

3.3.1 收益導向的鄰域結構

上層搜索策略以最大化選中節點的總收益爲目標,所以定義了三種以收益爲導向的鄰域結構:1–1 Replace, 2–1 Replace and 1–2 Replace。

1–1 Replace:將路徑r中某個節點i(被選中的節點/顧客)與一個沒有被選中的節點j 交換。在移除節點i前/後,檢查節點j可行的插入位置。特別地,若是不須要移除節點i,就找到節點j的可行插入位置,該操做就退化爲單點插入;

2–1 Replace:去掉路徑中的兩個節點(被選中的節點),插入一個未被選中的節點。移除兩個被選中的節點後,檢查可行的插入位置;

1–2 Replace:去掉路徑中的一個節點,插入兩個未被選中的節點。移除被選中的節點後,檢查可行的插入位置;

上面的操做是去掉被選中的節點,插入未被選中的節點,而每一個節點對應收益,這些操做直接影響總收益,因此稱爲「收益爲導向」。從初始可行解出發,使用上述鄰域結構,可產生對應的鄰域。時間複雜度均爲多項式時間,依次爲O($n^3$)、O($n^4/2$)、O($n^5/2$)。

在局部搜索過程當中,爲減小計算時間,評估鄰域中解的收益時,只須要考慮受影響的路徑(有節點移除、插入),其餘不受影響的路徑其收益不變。這就須要有特定的數據結構來存儲訪問過的解的信息,下面的filter-and-fan Search方法可解決該問題。

3.3.2 禁忌搜索(Tabu Search)

禁忌搜索是一種常見的鄰域搜索方法,從初始解s出發,迭代從鄰域$ϕ_y​(s)$中選擇不在禁忌列表中的容許解(admissible solution)進行訪問,直到知足某個終止條件。禁忌列表來存儲最近若干次被訪問的解,若禁忌列表中某個解被訪問能對目標函數帶來較大的提高,該解可被解禁,即從禁忌列表中移除。經過禁忌列表和解禁的操做,跳出局部最優。

image.png

這裏,有兩個參數須要設置:$u_t$--禁忌列表的長度,$z_t$--最大迭代次數。這兩個參數影響最終返回的局部最優解的質量。

3.3.3 Filter-and-Fan Search

禁忌搜索可當作單點搜索策略,每次迭代從一個解出發,在其鄰域中選擇下一個要訪問的解。Filter-and-Fan Search可看做多點搜索策略,構造了廣度優先的鄰域樹,每次迭代從樹的一層(多個解)向下進行搜索。這裏用兩個參數來控制鄰域樹的大小,每層節點(解)個數$n_1$和樹的深度L。

image.png

Filter-and-Fan搜索考慮更大的鄰域,$ϕ_s$​={$ϕ_{y1}​​,ϕ_{y2}​​,ϕ_{y3}$​​},給定當前解s,在鄰域$ϕ_s$​中尋找收益最高的$n_1$個點。給定根節點$s_0$,在鄰域$ϕ_s$​中尋找收益最高的$n_1$個點做爲第一層的節點;對第l層的某個節點,選擇其鄰域中收益最高的$n_1$個點,則第i層$n_1$個點,共產生$n_1^2$個候選點。這個過程就像扇子同樣,稱爲fan process。從這$n_1^2$個候選點中,再選擇收益最高的$n_1$個點做爲第l+1層的節點,這個過程稱爲filter process。fan process產生鄰域樹逐層生長的候選點,filter process控制樹的每層節點個數。

Filter-and-Fan搜索總體看,相似於多線程的禁忌搜索。同時,藉助於樹結構記錄了搜索過程當中訪問的每一個點,爲評估解的收益時只考慮受影響的路徑提供了方便。這也是Filter-and-Fan搜索計算時間短的主要緣由。

3.4下層搜索策略:距離最小化

針對禁忌搜索或Filter-and-Fan Search產生的解,下層搜索策略以最小化車輛行駛(路徑)總里程爲目標,採用有序搜索方式進行改進。下層搜索策略考慮交換邊的鄰域結構:2-Opt、1–1 Exchange、1–0 Relocate,將這三種鄰域結構依次標號爲一、二、3。首先嚐試標號1的鄰域結構,若是找到更優解(距離更短),從更優解繼續迭代;不然,依次嘗試標號高的鄰域二、3,若在標號最大的鄰域,都沒有找到更優的解,搜索終止。

image.png

其中,2-Opt:交換同一條路徑上的兩條邊;1–1 Exchange:交換不一樣路徑上的兩條邊;1–0 Relocate:去掉一條路徑上的邊,插入到另外一條路徑上。

4.計算實驗

4.2 參數設置和實證分析

採用130個前人論文中使用的CTOP實例,進行實驗,從解的質量(相對當前已知最優解的偏離百分比)、求解時間兩個方面分析算法參數的影響。其中,相對當前已知最優解的偏離百分比=(當前已知最優解對應收益-算法求出解對應收益)/當前已知最優解對應收益*100%。

4.2.1 禁忌搜索效果分析

考慮禁忌列表長度$u_t$、最大迭代次數$z_t$對求解的影響。這裏,在總體搜索框架Algorithm1中不使用Filter-and-Fan Search,只考慮禁忌搜索。

image.png

單獨使用禁忌搜索在將近10s時間內能夠改進當前已知最優解0.01%($u_t$ = 30 and $z_t$ = 6000)。

4.2.2 Filter-and-Fan Search效果分析

單獨使用Filter-and-Fan Search,討論參數鄰域樹每層節點個數$n_1$和樹的深度L對求解的影響。

image.png

當每層節點個數=200,樹的深度=125時,能夠改進當前已知最優解0.01%。考慮到計算時間,每層節點個數=100、樹的深度=100看起來是不錯的選擇。

4.2.3 組合效果分析

結合使用禁忌搜索和Filter-and-Fan Search,正如Algorithm1中所示Bi-level Filter-and-Fan method,固定參數$n_1$=100、L=100,考慮禁忌搜索參數$u_t$、$z_t$的組合影響。

image.png

Bi-level Filter-and-Fan method平均在6.83s內可改進當前已知最優解0.012%,且迭代次數少於1000次($u_t$ = 30, $z_t$ = 750, $n_1$ = 100,L = 100)。而單獨使用禁忌搜索改進當前最優解0.01%須要迭代6000次,時間將近10s($u_t$ = 30 and $z_t$ = 6000)。

4.2.4 雙層搜索機制的效果分析

single-level指的是在禁忌搜索和Filter-and-Fan Search中不使用變鄰域降低算法VND。

image.png

在求解時間、解的質量方面,雙層搜索機制都要優於單層搜索機制。

4.3 CTOP測試用例上求解結果對比

BiF&F-s、BiF&F-f表示雙層搜索機制的兩種不一樣參數配置:s-slow($z_t$ = 10,000, $u_t$ = 30, $n_1$ = 100 and L = 100),f-fast($z_t$ = 750, $u_t$ = 30, $n_1$ = 100, L = 100)。BiF&F-b表明BiF&F使用各類參數配置得獲得的最佳解,b-best。

採用BiF&F-s、BiF&F-f和前人論文Archetti et al. (2009)中提出的啓發式算法VNS、TSf在130個測試用例上進行對比。部分結果以下
image.png

注:BK-已知最優解(best known results);p-總收益(total profit), t-計算時間(computational time),%D-相對已知最優解BK的偏離百分比。

BiF&F-f、BiF&F-s在130個CTOP測試用例上表現出色:BiF&F-f能夠在6.83s(平均)內對已知最優解BK的改進爲0.012%,得到12個新的最優解;BiF&F-s可在14.36s內對已知最優解改進爲0.04%,得到18個新的最優解。

4.4 大規模CTOP實例上表現

BiF&F-f在大規模CTOP實例上獲得的解與最佳解的平均偏離爲0.18%,最大偏離低於2.52%,平均計算時間爲1365s。BiF&F-s與最佳解的平均偏離爲0.01%,最大偏離不超過0.53%,平均計算時間爲4,657.76s。部分結果以下

image.png

相關文章
相關標籤/搜索