国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

帶退貨的周期車輛路徑問題的C—W節(jié)約算法

2016-05-31 08:42竇冰潔張麗華趙麗娜孫蕊
物流科技 2016年3期
關(guān)鍵詞:運(yùn)籌學(xué)

竇冰潔 張麗華 趙麗娜 孫蕊

摘 要:文章用MATLAB代碼給出了一個(gè)改進(jìn)的C-W節(jié)約算法來求解帶退貨的周期車輛路徑問題,目標(biāo)是最小化周期內(nèi)總的行駛費(fèi)用和總的啟動費(fèi)用之和,并舉例對算法進(jìn)行了說明。

關(guān)鍵詞:運(yùn)籌學(xué);周期車輛路徑問題;C-W節(jié)約算法

中圖分類號:U116.2 文獻(xiàn)標(biāo)識碼:A

Abstract: In this paper, an improved C-W saving algorithm is given by MATLAB codes to solve the periodic vehicle routing problem with backhauls, aiming to minimize the sum of the total travel expenses and the total startup cost over the planning horizon, an example is gives to illustrate the algorithm.

Key words: operations research; periodic vehicle routing problem; C-W saving algorithm

0 引 言

周期車輛路徑問題(Period Vehicle Routing Problem, PVRP)是車輛路徑問題(Vehicle Routing Problem, VRP)的一個(gè)重要的分支,最早由Beltrami和Bodin[1]于1974年提出,是VRP在時(shí)間上的擴(kuò)展,而由于企業(yè)很多計(jì)劃都是按一定的周期來制定的,所以PVRP有著很強(qiáng)的實(shí)用價(jià)值,因此到目前為止國內(nèi)外對其進(jìn)行的研究已有很多成果:Ann和Jill[2]對國外從1974到2012年這方面的文獻(xiàn)以及2013年的部分文獻(xiàn)進(jìn)行了詳細(xì)綜述,之后又有10多篇文獻(xiàn)[3-13]對PVRP進(jìn)行了研究。國內(nèi)學(xué)者在VRP領(lǐng)域進(jìn)行了大量的研究,但目前對PVRP方面的研究還比較少:姜貴山[14]設(shè)計(jì)了改進(jìn)的引導(dǎo)鄰域搜索算法、蔡婉君等[15]給出了改進(jìn)的蟻群算法來求解PVRP。以上這些文獻(xiàn)可分為兩種類型:(1)只送貨的PVRP問題;(2)帶取送貨(pickup and delivering)的PVRP。其中只有文獻(xiàn)[10]和[16]是研究類型(2)的,然而近年來,保障商品質(zhì)量、上架及時(shí)和退貨服務(wù)成為電商及大型連鎖超市應(yīng)對激烈的市場競爭的關(guān)鍵所在,而在這一過程中物流配送是核心環(huán)節(jié),因此受到了高度的關(guān)注。另外,不同種類貨物的銷售多受地域影響,以及消費(fèi)者維權(quán)意識的增強(qiáng),使得超市間貨物調(diào)換和產(chǎn)品退回事件趨于普遍,這就要求發(fā)展逆向物流配送系統(tǒng),因此,本文研究了一個(gè)帶退貨的PVRP,該問題隸屬于類型(2)中帶同時(shí)取送貨的PVRP,而且要求每個(gè)客戶在其被服務(wù)的各個(gè)時(shí)間段里取貨和送貨任務(wù)都由一輛車來完成,這與文獻(xiàn)[10]和[16]研究的問題都有所不同。

1 問題描述及數(shù)學(xué)模型

1.1 問題描述

在一個(gè)區(qū)域內(nèi)有一個(gè)配送站點(diǎn)(車場),m個(gè)顧客,一個(gè)周期中有T個(gè)時(shí)間段,顧客ll=1,2,…,m在周期內(nèi)要求的服務(wù)次數(shù)(以下簡稱頻率)為f0

當(dāng)各個(gè)顧客的退貨量都是零時(shí)上述問題就是傳統(tǒng)的PVRP,因此傳統(tǒng)的PVRP是本文所討論問題時(shí)的子問題。因PVRP是NP-hard的,所以本文的問題也是NP-hard的。

1.2 數(shù)學(xué)模型

令N為顧客點(diǎn)集合,N=1,2,3,…,m,0表示車場;A為弧的集合,a為連接客戶點(diǎn)i和j的弧;d和c分別表示i與j之間距離和單位距離的運(yùn)輸費(fèi)用(當(dāng)i=j時(shí),d=0, c=0);K表示所有車輛集合;Q和C分別表示每輛車的車載限制和一次性啟動費(fèi)用;在周期為T個(gè)時(shí)間段計(jì)劃中,f表示客戶i要求的頻率,分別表示客戶i在第t個(gè)時(shí)間段t∈T的需求量與退貨量。模型中決策變量為:w表示第t天弧a上的車載量。

式(1)的第一項(xiàng)為總的行駛費(fèi)用,第二項(xiàng)為總的啟動費(fèi)用;式(2)保證對每一個(gè)客戶點(diǎn)總訪問次數(shù)等于其要求頻率;式(3)表示被一輛車依次服務(wù)的兩個(gè)客戶點(diǎn)必須被安排在同一個(gè)時(shí)間段;式(4)為流平衡約束:在第tt=1,…,T個(gè)時(shí)間段進(jìn)入某點(diǎn)的車輛數(shù)等于從此點(diǎn)出去的車輛數(shù);式(5)表示分配到每一個(gè)時(shí)間段的所有客戶點(diǎn)在該時(shí)間段都被訪問到;式(6)為子回路消去約束;式(7)表示一輛車在一個(gè)時(shí)間段內(nèi)最多只被用一次;式(8)至式(10)表示車輛在行駛過程中的車容量約束;式(11)至式(13)定義變量的取值范圍。

2 問題求解

姜貴山[20]設(shè)計(jì)改進(jìn)的引導(dǎo)鄰域搜索算法中,提出應(yīng)用C-W節(jié)約算法構(gòu)建PVRP的初始可行解。本文對此算法做出進(jìn)一步改進(jìn),得到解決本問題的改進(jìn)C-W 節(jié)約算法,下面用Matlab代碼給出該算法。

function [solution, Customers_just_information]=Modified_CW_SAT,m,f,M,p,q,Q本函數(shù)Modified_CW_SA為求解帶退貨的周期車輛路徑問題的修改C-W節(jié)約算法。

T,m,Q: 分別存儲周期長度、客戶數(shù)量、車輛容量;f: 是一個(gè)1×m矩陣,存儲所有客戶的頻率;M: 是一個(gè)m×m矩陣, 存儲所有客戶間的節(jié)約值;p,q: 都是T×m矩陣, 分別存儲每個(gè)時(shí)間段所有客戶的需求量和退貨量;solution:是一個(gè)T行m+1列的元胞數(shù)組,各行第一個(gè)元素存儲該行對應(yīng)時(shí)間段路徑總數(shù),其余元素分別存儲該行對應(yīng)時(shí)間段里的各條路徑; Customers_just_information: 是一個(gè)m行2列的元胞數(shù)組, 其第i行第1個(gè)元素Customers_just_informationi,1存儲一個(gè)1×T矩陣,該矩陣的第j個(gè)元素Customers_just_informationi,1j=0或1,前者和后者分別表示第i個(gè)客戶在第j個(gè)時(shí)間段沒有被服務(wù)和已經(jīng)被服務(wù),Customers_just_information的第i行第2個(gè)元素Customers_just_informationi,2存儲一個(gè)T×3 矩陣,該矩陣的第t行第1-3個(gè)元素Customers_just_informationi,2t,s,s=1,2,3依次存儲第i個(gè)客戶在第t個(gè)時(shí)間段所在的路徑(在第k條路徑上就存k)、在該路徑上的位置(是該路徑上第u個(gè)客戶點(diǎn)就存u)、該路徑的長度。

Customers_just_information=cellm,2; solution=cellT,m+1;

for k=1:m

Customers_just_informationk,1=zeros1,T; Customers_just_informationk,2=zerosT,3;

end

for v=1:T

solutionv,1= 0;

end

temp_M=M:; hs,wz=sorttemp_M, 1,'descend'; temp=findM~=0,1;

while~isempty(temp)

for s=1:m^2

x,y=ind2subsizeM,wzs; wzs對應(yīng)的客戶點(diǎn)x,y;nx,ny:客戶點(diǎn)x,y當(dāng)前已被服務(wù)的次數(shù)。

nx=sum(Customers_just_informationx,1(:)); ny=sum(Customers_just_informationy,1(:));

if nx==fx&& ny==fy

Mx,y=0; temp_M=M(:); hs,wz=sorttemp_M, 1,'descend'; temp=findM~=0,1; break

end

if nx==fx&& ny

left_ny=fy-ny; 客戶點(diǎn)y的剩余被服務(wù)次數(shù)

[newCustomers_just_information, newsolution]=Joint_point_to_endpoint (Customers_just_information, solution, x, y, left_ny, p, q, Q); 調(diào)用函數(shù)Joint_point_to_endpoint來處理x為端點(diǎn)而y未被服務(wù)的那些時(shí)間段函數(shù)Joint_point_to_endpoint先在所有的時(shí)間段里尋找未完成路徑中以客戶點(diǎn)x為端點(diǎn)且在該時(shí)間段里客戶點(diǎn)y未被服務(wù)的時(shí)間段,之后判別在這些時(shí)間段里將客戶點(diǎn)y安排在客戶點(diǎn)x之前或之后是否可行且客戶點(diǎn)y被安排的次數(shù)不超過其剩余被服務(wù)次數(shù)left_ny, 如果滿足這些條件就更新Customers_just_information和solution,并將最終的更新結(jié)果分別賦值給newCustomers_just_information與newsolution返回。

Customers_just_information=newCustomers_just_information; solution=newsolution;

Mx,y=0; temp_M=M:;

hs,wz=sorttemp_M, 1,'descend'; temp=findM~=0,1; break

end

if nx

left_nx=fx-nx; 客戶點(diǎn)x的剩余被服務(wù)次數(shù)

[newCustomers_just_information, newsolution]=Joint_point_to_endpoint(Customers_just_information, solution, y, x, left_ nx, p, q, Q); 調(diào)用函數(shù)Joint_point_to_endpoint來處理y為端點(diǎn)而x未被服務(wù)的那些時(shí)間段

Customers_just_information=newCustomers_just_information; solution=newsolution;

Mx,y=0; temp_M=M:; hs,wz=sorttemp_M, 1,'descend'; temp=findM~=0,1; break

end

if nx

left_ny=fy-ny; 客戶點(diǎn)y的剩余被服務(wù)次數(shù)

[newCustomers_just_information, newsolution]=Joint_point_to_endpoint(Customers_just_information, solution, x, y, left_ny, p, q, Q); 調(diào)用函數(shù)Joint_point_to_endpoint來處理x為端點(diǎn)而y未被服務(wù)的那些時(shí)間段

Customers_just_information=newCustomers_just_information; solution=newsolution;

left_nx=fx-nx; 客戶點(diǎn)y的剩余被服務(wù)次數(shù)

[newCustomers_just_information, newsolution]=Joint_point_to_endpoint (Customers_just_information, solution, y, x, left_nx, p, q, Q); 調(diào)用函數(shù)Joint_point_to_endpoint來處理y為端點(diǎn)而x未被服務(wù)的那些時(shí)間段

Customers_just_information=newCustomers_just_information; solution=newsolution;

ny=sum(Customers_just_informationy,1:); nx=sum(Customers_just_informationx,1:);

if nx

[newCustomers_just_information, newsolution]=Creat_two_points_path (solution, f, Customers_just_information, nx, ny, x, y, p, q, Q); 生成新路徑::車場→x→y→車場

函數(shù)Creat_two_points_path (solution, f, Customers_just_information, nx, ny, x, y, p, q, Q)首先尋找x,y都未被服務(wù)的時(shí)間段,如果這樣的時(shí)間段存在,就計(jì)算x,y剩余被服務(wù)次數(shù)left_nx,left_ny將最小者記為Min_Left_Delivery_Times,接著判斷路徑:車場→x→y→車場在x,y都未被服務(wù)的時(shí)間段中是否可行,如果可行,就在這些時(shí)間段中個(gè)數(shù)不超過Min_Left_Delivery_Times的時(shí)間段里生成新路徑:車場→x→y→車場,更新Customers_just_information和solution,并將最終的更新結(jié)果分別賦值給newCustomers_just_information與newsolution返回。

solution=newsolution; Customers_just_information=newCustomers_just_information;

ny=sum (Customers_just_informationy,1:); nx=sum (Customers_just_informationx,1:);

if nx

[newCustomers_just_information, newsolution]=Creat_two_points_path (solution, f, Customers_just_information, ny, nx, y, x, p, q, Q); 生成新路徑:車場→y→x→車場

solution=newsolution; Customers_just_information=newCustomers_just_information;

end

end

Mx,y=0; temp_M=saving_values:; hs,wz=sort (temp_M, 1, 'descend'); temp=findM~=0,1; break

end

end

end 此時(shí)所有客戶點(diǎn)間的節(jié)約值都變成了0

for h=1:m 處理未達(dá)到其頻率的客戶

nh=sum(Customers_just_informationh,1); 客戶點(diǎn)h已經(jīng)被服務(wù)的次數(shù)nh

if nh

tem=find (Customers_just_informationh,1==0); 找到客戶點(diǎn)h未被服務(wù)的所有時(shí)間段將它們存儲在tem里

for h1=1: fh-nh 在客戶點(diǎn)h未被服務(wù)的時(shí)間段里挑出其剩余頻率fh-nh個(gè)時(shí)間段,單獨(dú)派車對其進(jìn)行服務(wù)

Customers_just_informationh,1temh1=1; solutiontemh1,1=solutiontemh1,1+1;

solutiontemh1, solutiontemh1,1+1=h;

end

end

end

3 例 子

在-500,500×-500,500的區(qū)域內(nèi)隨機(jī)產(chǎn)生21個(gè)點(diǎn),第1個(gè)點(diǎn)為車場,其余的點(diǎn)為客戶(如圖1所示)。設(shè)一個(gè)周期為7個(gè)時(shí)間段,隨機(jī)產(chǎn)生每一客戶在周期內(nèi)要求的服務(wù)次數(shù)(簡稱為頻率)見表1,表2為每個(gè)客戶在各個(gè)時(shí)間段的需求量和退貨量。

根據(jù)本文所給出的改進(jìn)的C-W節(jié)約算法,得到周期內(nèi)每個(gè)時(shí)間段的路徑及路徑數(shù)見表3。表3中第k行第s列(如果不空)k=2-8,s=2-8給出第k-1個(gè)時(shí)間段的第s-1條路徑,如第4行第5列為15,3,10,就表示第4個(gè)時(shí)間段第5條路徑為:車場→客戶點(diǎn)15→客戶點(diǎn)3→客戶點(diǎn)10→車場。

此例子中:①總的啟動費(fèi)用為:(3+4+5+7+3+3+5)×10=300;

②總的行駛費(fèi)用為:5.0773e+004;

③總費(fèi)用為:300+(5.0773e+004)=5.1073e+004。

4 結(jié) 論

本文對帶退貨的單車場周期車輛路徑問題進(jìn)行了描述,無論對于大型連鎖超市還是供貨商而言,此問題都有實(shí)際意義和商業(yè)價(jià)值。用MATLAB代碼給出了求解該問題的C-W節(jié)約算法,通過例子表明所設(shè)計(jì)的算法操作簡便,易于理解。

參考文獻(xiàn):

[1] Beltrami E J, Bodin L D. Networks and vehicle routing for municipal waste collection[J]. Networks, 1974,4(1):65-94.

[2] Ann M C, Jill H W. Forty years of periodic vehicle routing[J]. Networks, 2014,63(1):2-15.

[3] Alper Hamzadayi, Seyda Topaloglu, Simge Yelkenci Kose. Nested simulated annealing approach to periodic routing problem of a retail distribution system[J]. Computers & Operations Research, 2013,40:2893-2905.

[4] Theodore A, Ioannis M. Efficient techniques for the multi-period vehicle routing problem with time windows within a branch and price framework[J]. Annals of Operations Research, 2013,206:1-22.

[5] Alireza R-V, Teodor GC, Michel G, et al. A path relinking algorithm for a multi-depot periodic vehicle routing problem[J]. Heuristics, 2013,19:497-524.

[6] Mohammad Mirabi. A hybrid electromagnetism algorithm for multi-depot periodic vehicle routing problem[J]. Int J Adv Manuf Technol, 2014,71:509-518.

[7] Phuong Khanh Nguyen, Teodor Gabriel Crainic, Michel Toulouse. A hybrid generational genetic algorithm for the periodic vehicle routing problem with time windows[J]. J Heuristics, 2014,20:383-416.

[8] V. Cacchiani, V. C. Hemmelmayr, F. Tricoire. A set-covering based heuristic algorithm for the periodic vehicle routing problem[J]. Discrete Applied Mathematics, 2014,163:53-64.

[9] Julien Michallet, Christian Prins, Lionel Amodeo, et al. Multi-start iterated local search for the periodic vehicle routing problem with time windows and time spread constraints on services[J]. Computers & Operations Research, 2014,41:196-207.

[10] Suyanto C, Herman M. A model for periodic vehicle routing problem with delivery and pick-up considering maximum distance[J]. International Journal of Science and Advanced Technology, 2014,4(8):1-9.

[11] Narges Norouzi, Mohsen Sadegh-Amalnick, Mehdi Alinaghiyan. Evaluating of the particle swarm optimization in a periodic vehicle routing problem[J]. Measurement, 2015,62:162-169.

[12] Mohammad M. A novel hybrid genetic algorithm for the multidepot periodic vehicle routing problem[J]. Artificial Intelligence for Engineering Design, 2015,29:45-54.

[13] Alireza Rahimi-Vahed, Teodor Gabriel Crainic, Michel Gendreau, et al. Fleet-sizing for multi-depot and periodic vehicle routing problems using a modular heuristic algorithm[J]. Computers & Operations Research, 2015,53:9-23.

[14] 姜貴山. 周期性車輛路徑問題的引導(dǎo)式鄰域搜索算法設(shè)計(jì)及應(yīng)用[D]. 上海:上海交通大學(xué)(碩士學(xué)位論文),2010.

[15] 蔡婉君,王晨宇,等. 改進(jìn)蟻群算法優(yōu)化周期性車輛路徑問題[J]. 運(yùn)籌與管理,2014,23(5):70-77.

[16] Peter F, Karen S, Michal T. The period vehicle routing problem with service choice[J]. Transportation Science, 2006,40(4):439-454.

猜你喜歡
運(yùn)籌學(xué)
獨(dú)立學(xué)院運(yùn)籌學(xué)教學(xué)的問題與對策
PBL+LBL雙軌模式下運(yùn)籌學(xué)課程教學(xué)中的應(yīng)用與評價(jià)
運(yùn)籌學(xué)課程教學(xué)改革問題研究
基于優(yōu)化軟件LINGO的運(yùn)籌學(xué)案例實(shí)踐教學(xué)研究
淺談對運(yùn)籌學(xué)專業(yè)教育的一些看法
產(chǎn)品最優(yōu)求解問題中運(yùn)籌學(xué)方法的應(yīng)用
高校運(yùn)籌學(xué)課程教學(xué)研討
占卜·廟算·軍事運(yùn)籌——談軍事運(yùn)籌學(xué)的歷史發(fā)展
談企管干部學(xué)習(xí)運(yùn)籌學(xué)