為了更好的學習vrp問題,準備將vrp問題的相關演算法、運算元、策略和技巧進行復現,編寫自己的vrp**庫。與此同時,在部落格上更新自己的學習程序,也是給自己的督促。除此之外,我將把問題限定在vrptw中,因為實際問題中,通常都包含了時間窗約束,同時還能解決duration的約束。先把我的vrp**的規範和說明介紹下,本人先使用lua語言,在microcity上執行,之後會改用python和c++改寫。lua裡的資料結構就是table搞定所有,所以開發起來特別方便。
classes:
route路徑:route = ,,; weight=10, ttype=1}
solution(路徑集) : routes = {}
輸入引數:
二維距離和時間矩陣矩陣:
節點資訊:
nodes[1] = 包括座標、需求(這裡提前考慮後期的重量、體積約束)、節點型別(depot:1,delivery:2,pickup:3,chargestation:4)
車輛資訊:
vehicle = } 為多車型做準備
演算法目錄:
constructive algorithms:最近鄰插入,節約里程(cw)法,solomon insertion i
metaheuristic algorithms:模擬退火,禁忌搜尋,變鄰域搜尋,大規模鄰域搜尋
exact algorithms:列生成,branch&price
以上其實都已經完成,持續貼出**。
行,開始斷更很久的vrp刷書記錄。
本書第一章就不寫了,都是基礎,應對滾瓜爛熟。
本章給出了local search(鄰域搜尋)的基本框架,介紹了經典moves,並討論了feasibility tests,genericity,multiple neighborhoods,very constrained problems,complex moves and accelerattion。
我們選用augerat et al.的set a中的例子1,『a-n32-k5.vrp』進行我們的演算法測試。
name : a-n32-k5
comment : (augerat et al, min no of trucks: 5, optimal value: 784)
type : cvrp
dimension : 32
edge_weight_type : euc_2d
capacity : 100
大家可以看看例子的說明。32個點,capacity是100,歐幾里得距離。
local search 的幾個步驟如上,
node relocation and node exchange
在呼叫這些運算元的時候,我想寫成迭代器(iterator)來遍歷這些鄰域。
closure是一種可以訪問其外部巢狀環境的區域性變數的函式。
建立「非區域性的變數」(non-local variable)
function values(t)
local i = 0
return function () i = i + 1; return t[i] end
end
local search 的大部分操作的時間複雜度都是o(n2),但是需要使用很多次,碰到large scale的問題就跑不動了,因此我們想尋找一些加速的techniques。
也就是在feasibility tests的時候,根據問題和資料調整the order of tests,當然是容易violate的放前面,這樣會提前跳出。當然,怎麼確定順序或者動態調整順序,我們後期到了vrptw了再詳談。
1 restricted number m of randomly selected moves, 後期再講;
2 lists of neighbors,這個之前我用過,不錯,也下次再詳述。
3 vertex marking, 第一次見,之後試試,感覺挺有意思。
4 sequential search,
車輛路徑問題之jsprit(二) jsprit特性
jsprit 特性 支援無限和有限車隊 支援混合車隊 支援多倉庫 支援開放線路 支援不同出發和達到地 支援多尺寸 分割的運力 支援中途揀貨和投放 支援服務時間限制 支援有時間窗的任務 支援具有一定技能或載具要求的任務 支援優先順序 支援定義額外的無狀態和有狀態的約束 條件以解釋複雜問題的能力 模組 ...
VRP(車輛路徑問題)的兩種簡單演算法
假設在乙個供求關係系統中,車輛從貨源取貨,配送到對應的若干配送點。車輛存在最大載貨量,且配送可能有時間限制。需要合理安排取貨時間,組織適當的行車路線,使使用者需求得到滿足,同時使某個代價函式最小,比如總工作時間最少 路徑最短等。可以看出tsp問題是vrp問題的一種簡單特殊形式。因此,vrp也是一種n...
c 學習之一
建構函式不要為虛 virtual vc 6.0反正不支援,報錯為 error c2633 a inline is the only legal storage class for constructors 據說cb支援,不過,建構函式本來就沒必要為虛,物件初始化時肯定是要呼叫的 不過,有派生類時析構...