① 沒學過matlab,下面是遺傳演算法解決車輛路徑演算法,請解釋一下選擇,和交叉,謝謝!!!
[x,lumda]=eig(A);
這句是得到A的特徵值和相應的特徵向量.
會發現x是特徵向量,是N*N的矩陣(N是A的大小),即3*3
而lumda也是一個3*3的矩陣,不過它只是對角線上有值。
只要找到對角線上絕對值最大的列。然後輸出x相應的列就是最大特徵根對應的特徵值。
r=abs(sum(lumda)),先對lumda進行列求和。然後求絕對值,實際上就是求對角線元素的絕對值。
n=find(r==max(r)),首先先求出r中最大的值,然後再找到哪一列是最大的值。最後得到的n是最大特徵值對應的列。
於是最大特徵值為lumda中第n行第n列(lumda是方陣,其實就是求它的第n個對角元)
相應的特徵向量,就是x中第n列。
② 用matlab解決車輛路徑規劃問題,主要是遺傳演算法
遺傳演算法(Genetic Algorithm)是模擬達爾文生物進化論的自然選擇和遺傳學機理的生物進化過程的計算模型,是一種通過模擬自然進化過程搜索最優解的方法,它最初由美國Michigan大學J.Holland教授於1975年首先提出來的,並出版了頗有影響的專著《Adaptation in Natural and Artificial Systems》,GA這個名稱才逐漸為人所知,J.Holland教授所提出的GA通常為簡單遺傳演算法(SGA)。遺傳演算法(Genetic Algorithm)是一類借鑒生物界的進化規律(適者生存,優勝劣汰遺傳機制)演化而來的隨機化搜索方法。它是由美國的J.Holland教授1975年首先提出,其主要特點是直接對結構對象進行操作,不存在求導和函數連續性的限定;具有內在的隱並行性和更好的全局尋優能力;採用概率化的尋優方法,能自動獲取和指導優化的搜索空間,自適應地調整搜索方向,不需要確定的規則。遺傳演算法的這些性質,已被人們廣泛地應用於組合優化、機器學習、信號處理、自適應控制和人工生命等領域。它是現代有關智能計算中的關鍵技術。 對於一個求函數最大值的優化問題(求函數最小值也類同),一般可以描述為下列數學規劃模型:遺傳演算法 式中為決策變數,為目標函數式,式2-2、2-3為約束條件,U是基本空間,R是U的子集。滿足約束條件的解X稱為可行解,集合R表示所有滿足約束條件的解所組成的集合,稱為可行解集合。 遺傳演算法的基本運算過程如下: a)初始化:設置進化代數計數器t=0,設置最大進化代數T,隨機生成M個個體作為初始群體P(0)。 b)個體評價:計算群體P(t)中各個個體的適應度。 c)選擇運算:將選擇運算元作用於群體。選擇的目的是把優化的個體直接遺傳到下一代或通過配對交叉產生新的個體再遺傳到下一代。選擇操作是建立在群體中個體的適應度評估基礎上的。 d)交叉運算;將交叉運算元作用於群體。所謂交叉是指把兩個父代個體的部分結構加以替換重組而生成新個體的操作。遺傳演算法中起核心作用的就是交叉運算元。 e)變異運算:將變異運算元作用於群體。即是對群體中的個體串的某些基因座上的基因值作變動。 群體P(t)經過選擇、交叉、變異運算之後得到下一代群體P(t 1)。 f)終止條件判斷:若tT,則以進化過程中所得到的具有最大適應度個體作為最優解輸出,終止計算。
③ 用遺傳演算法求解配送路線優化問題時,交叉率和變異率怎麼設定
以下是問題的詳細回答,文字有些長,請你耐心看希望對你有幫助。
傳演算法可以很好的解決物流配送路徑優化問題。但是由於遺傳演算法交配運算元操作可能會使最好解遺失,所以將遺傳演算法和模擬退火演算法結合來解決這一問題。實驗結果表明:用這種有記憶功能的遺傳模擬退火演算法求解物流配送路徑優化問題,可以在一定程度上解決上述問題,從而得到較高質量的解。
一 物流系統簡介
物流系統是以客戶滿意為目標,根據顧客的要求條件,從生產地到銷售地,在倉儲、包裝、配送、運輸、裝卸等環節有機整合所形成的實物、服務以及信息的流通過程所組成的一個復雜的系統。
物流配送是現代化物流管理中的一個重要環節。它是指按用戶的定貨要求,在配送中心進行分貨、配貨,並將配好的貨物及時送交收貨人的活動。本文討論物流配送中的路徑優化問題,並且通過結合模擬退火演算法來解決遺傳演算法在解決此類問題時的不足。
二 系統模型設計
物流配送路徑優化問題可以按這樣的情況進行描述:從某物流配送中心用多輛配送車輛向多個客戶送貨。每個客戶的位置和貨物需求量一定,每輛車的載重量一定,配送時間一定,其一次配送的最大行駛距離一定。要求合理安排車輛配送路線,使目標函數得到最優。並滿足以下條件:(1)每條配送路徑上各客戶需求量之和不超過配送車輛的載重量;(2)每條配送路徑的長度不超過配送車輛一次配送的最大行駛距離;(3)每次配送的貨物不能超過客 戶要求的時間; (4)每個客戶的需求必須滿足,且只能由一輛配送車送貨。設配送中心需要向k個客戶送貨,每個客戶的貨物需求量是g (i=1,2,…..k),每輛配送車的載重量是q,且g 下面建立此問題的數學模型:c 表示點i到點j的運輸成本,t 表示從i到s所允許的最大時間。配送中心編號為0,各客戶編號為i(i=1,2,….,k),定義變數如下:
x = 1 或 0(其中,當x 等於1時表示車s由i駛向j;0表示沒有該路徑。)。
y = 1 或 0(其中,當y 等於1時表示點i的貨運任務由s車完成;0表示沒有。)。
根據上述變數定義可得到的數學模型如下所示:
min Z = ; (1) ;(2)
= 1或 m(其中,當 i = 1,2,……,k時為1,否則為0。);(3)
= y ,j = 1,2,……,k;s = 1,2,……,m; (4)
= y ,i = 0,1,……,k;s = 1,2,……,m; (5)
t > 0;且t t , j = 1,2……,s-1; (6)
上述模型中,式(2)為汽車容量約束;式(3)保證了每個客戶的運輸任務僅由一輛車完成,而所有運輸任務則由m輛車協同完成;式(4)和式(5)限制了到達和離開某一客戶的汽車有且僅有一輛。式(6)對配送時間做了約束,即物品到達指定地點的時間不能大於其最大允許時間。
上述模型中還要考慮時間問題,即每個客戶對所送物品的時間要求各不相同,故需加入一個時間參數t 。對每個運輸路徑都加上時間參數t (t 的值可由客戶需求中得知,並記錄到資料庫。),在每個規定的時間內(如一個月),優先配送t 值小的物品,每次在用遺傳演算法求解前,遍歷規定時間內的所有t ,按照t 值由小到大排列染色體,然後再求出最優解,根據最優解制定配送方案。
三 引入退火演算法改進求解過程
針對遺傳演算法的一些不足,將模擬退火演算法與之結合,並加入記憶裝置,從而構造了物流配送路徑優化問題的一種有記憶功能的遺傳模擬退火演算法。該演算法的特點是擴大了原有遺傳演算法的搜索鄰域,在一定概率控制下暫時接受一些惡化解。同時利用記憶裝置保證了在一定終止條件下所得的最終解至少是搜索過程中曾得到所有解中的最優解。該演算法通過在常規的遺傳演算法基礎上加入模擬退火運算元和記憶裝置而得到。下面首先介紹此有記憶功能的遺傳模擬演算法的步驟。根據參考文獻[3],給出下面的演算法實現步驟:
STEP1 給定群體規模maxpop,將初始群體按照t 所指定的值進行分塊, k=0;初始溫度t =t ,產生初始群體pop(k),並且初始群體的每個分塊中都具有t 滿足某一屬性的特徵值;對初始群體計算目標值f(i), 找出使函數f (t )最小的染色體i和這個函數值f,記i =i,f =f;其中,f (t )為狀態i在溫度為t 時的目標值。i∈ pop( k),即當代群體中的一個染色體;
STEP2 若滿足結束條件則停止計算,輸出最優染色體i 和最優解f ;否則,在群體pop(k)的每一個染色體i∈ pop(k)的鄰域中隨機選一狀態j∈N( i ),且t 滿足條件要求, 按模擬退火中的接受概率
接受或拒絕j,其中f (t ), f (t )分別為狀態i,j的目標值。這一階段共需maxpop次迭代以選出新群體newpop1;
STEP3 在newpop1(k+1)中計算適應度函數
其中,f 是newpop1(k+1)中的最小值。由適應度函數決定的概率分布從newpop1中隨機選maxpop個染色體形成種群newpop2;
STEP4 按遺傳演算法的常規方法對newpop2進行交叉得到crosspop,再變異得到mutpop;
STEP5 染色體中的每個元素在滿足t 的情況下,且具有較大t 值的元素完成時沒有破壞具有較小t 值進行計算所需條件的情況下,不必按照由小到大的順序進行排列,
STEP6 令pop(k+1)=mutpop,對pop(k+1)計算f (t ),找出使函數f (t )最小的染色體i和這個函數值f,如果f < f ,則令i = i, f =f, t = d(t ),k = k+1, 返回 STEP2。
出於表示簡單,計算機處理方便的目的,對於VRP問題的遺傳演算法編碼通常都採用自然數編碼。上述數學模型的解向量可編成一條長度為k+m+1的染色體(0,i ,i ,…,i ,0,i ,…i ,0,…0,i ,…,i ,0)。在整條染色體中,自然數 i 表示第 j 個客戶。0的數目為m+1個,代表配送中心,並把自然數編碼分為m段,形成m個子路徑,表示由m輛車完成所有運輸任務。這樣的染色體編碼可以解釋為:第一輛車從配送中心出發,經過i ,i ,…,i 客戶後回到配送中心,形成了子路徑1;第2輛車也從配送中心出發,途徑i ,…i 客戶後回到配送中心,形成子路徑2。m輛車依次出發,完成所有運輸任務,構成m條子路徑。
如染色體0123045067890表示由三輛車完成9個客戶的運輸任務的路徑安排:
子路徑1:配送中心→客戶1→客戶2→客戶3→配送中心
子路徑2:配送中心→客戶4→客戶5→配送中心
子路徑3:配送中心→客戶6→客戶7→客戶8→客戶9→配送中心。
為了使演算法收斂到全局最優,遺傳群體應具有一定的規模。但為了保證計算效率,群體規模也不能太大。一般取群體規模取值在10到100之間。
在初始化染色體時,先生成 k 個客戶的一個全排列,再將 m+1 個 0 隨機插入排列中,其中所選的 k 個客戶所要求的時間必須在某一個特定的時間段內,且完成任何一個客戶配送任務時不能破壞完成其他客戶配送任務的條件。需要注意的是必須有兩個 0 被安排在排列的頭和尾,並且在排列中不能有連續的兩個0。這樣構成一條滿足問題需要的染色體。針對此染色體,隨機選擇兩個位置上的元素進行交換,並用演算法對其調整,使其成為新的滿足要求的染色體。交換若干次,直至生成滿足群體規模數的染色體。
在這里,將容量約束式(2)轉為運輸成本的一部分,運輸成本變為:
其中M為一很大的正數,表示當一輛車的貨運量超過其最大載重量時的懲罰系數。M應趨向於無窮大。考慮到計算機處理的問題,參考文獻[6],取M為1000000為宜。將此運輸成本函數作為我們的目標函數。適應度函數採用一種加速適應度函數:
這種適應度函數加速性能比較好,可以迅速改進適應度的值,縮短演算法運行時間。
將每代種群的染色體中適應度最大的染色體直接復制,進入下一代。種群中其他染色體按其適應度的概率分布,採用輪盤賭的方法,產生子代。這樣既保證了最優者可生存至下一代,又保證了其餘染色體可按生存競爭的方法生成子代,使得演算法可收斂到全局最優。選中的染色體按一定的概率—交叉率,產生子代。交叉率在0.6~0.8之間,演算法進化效果較好。
四 試驗數據與比較
實驗數據取自參考文獻[6]。
實驗1,隨機生成1個有8個門店的VRP問題,初始數據如下:
圖1八個門店的需求量及其位置
根據各倉庫的需求量,計算出需要的汽車數:m=[17.82/(0.85*8)]+1=3。採用傳統的遺傳演算法的各運算元,並對其中的交叉運算元進行了改造,取群體規模為20,進化代數為50,應用此程序他費時3s得到的結果為:
而我們的演算法在上面的演算法中加入了一個模擬退火運算元,取初始退火溫度為10,衰減系數取0.85使用第三節所述演算法步驟,在奔騰四的計算機上計算,耗時2s,得結果如下:
實驗2,隨機生成1個有20個門店的VRP問題,初始數據如下:
圖2 20個門店的需求量及其位置
計算得:需6輛車。用參考文獻[6]中的演算法取群體規模100,進化代數分別設為20,50,100,得到的結果不同:
圖3 普通遺傳演算法的實驗結果
而採用本文的演算法,初始退火溫度取10,衰減系數取0.85,在奔騰四的計算機上計算,則結果如下:
圖4 新型演算法的實驗結果
從以上兩個實驗可以看出:採用本文中所述的演算法,要得到相同的結果可以縮短進化代數,從而節約運算時間。而要增加進化代數必然得到更好的結果。
五 結論
用模擬退火演算法與傳統的遺傳演算法相結合來求解物流系統中車輛路徑問題,可以使演算法所需的進化代數明顯減少,問題解可在最短時間內求出。因此在時間特性上有了比較好的改善,耗時較短,獲得了較好的結果。根據參考資料所記載的數據表明,此演算法在解決諸如車輛路徑問題問題確實可行,並有較好的性能。而且隨著問題規模的增大,這種對時間性能的改善效果將更加明顯。這就非常有助於物流企業根據自己的實際情況科學、有效的指定物流決策,降低風險,降低成本,提高經濟效益和自身的競爭力。
參考文獻
[1] 郭耀煌 李軍著,車輛優化調度,成都:成都科技大學,1994
[2] 邢文訓 謝金星編著,現代優化計算方法,北京:清華大學出版社,1999
[3] 郎茂祥,物流配送車輛調度問題的模型和演算法研究,北京:北方交通大學,2002
[4] 郎茂祥 胡思繼,用混和遺傳演算法求解物流配送路徑優化問題的研究,中國管理科學,2002
[5] 李軍 謝秉磊 郭耀煌,非滿載車輛調度問題的遺傳演算法,系統工程理論與實踐,2000
[6] 唐坤,車輛路徑問題中的遺傳演算法設計,東北大學學報(自然科學版),2002
[7] 姜大立 楊西龍 杜文等,車輛路徑問題的遺傳演算法研究,系統工程理論與實踐,1999
[8] 閻慶 鮑遠律,新型遺傳模擬退火演算法求解物流配送路徑問題,計算機科學與發展,2002
④ 急求matlab車輛調度遺傳演算法代碼,需求車輛行駛最優路徑。
function [path,lmin]=ga(data,d) %data為點集,d為距離矩陣,即賦權圖
tic
%======================
sj0=data;%開環最短路線
%=================================
% sj0=[data;data(1,:)]; %閉環最短路線
%=========================
x=sj0(:,1);y=sj0(:,2);
N=length(x);
%=========================
% d(N,:)=d(1,:);%閉環最短路線
% d(:,N)=d(:,1);%距離矩陣d
%======================
L=N; %sj0的長度
w=800;dai=1000;
%通過改良圈演算法選取優良父代A
for k=1:w
c=randperm(L-2);
c1=[1,c+1,L];
flag=1;
while flag>0
flag=0;
for m=1:L-3
for n=m+2:L-1
if d(c1(m),c1(n))+d(c1(m+1),c1(n+1))<d(c1(m),c1(m+1))+d(c1(n),c1(n+1))
flag=1;
c1(m+1:n)=c1(n:-1:m+1);
<a href="https://www..com/s?wd=end&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">end</a>
<a href="https://www..com/s?wd=end&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">end</a>
<a href="https://www..com/s?wd=end&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">end</a>
end
J(k,c1)=1:L;
end
J=J/L;
J(:,1)=0;J(:,L)=1;
rand('state',sum(clock));
%遺傳演算法實現過程
A=J;
for k=1:dai %產生0~1 間隨機數列進行編碼
B=A;
c=randperm(w);
%交配產生子代B
for i=1:2:w
F=2+floor(100*rand(1));
temp=B(c(i),F:L);
B(c(i),F:L)=B(c(i+1),F:L);
B(c(i+1),F:L)=temp;
end;
%變異產生子代C
by=find(rand(1,w)<0.1);
if length(by)==0
by=floor(w*rand(1))+1;
end
C=A(by,:);
L3=length(by);
for j=1:L3
<a href="https://www..com/s?wd=bw&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">bw</a>=floor(1+fix(rand(1,3)*N)); %產生1-N的3個隨機數
<a href="https://www..com/s?wd=bw&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">bw</a>=sort(<a href="https://www..com/s?wd=bw&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">bw</a>);
C(j,:)=C(j,[1:bw(1)-1,bw(2)+1:bw(3),bw(1):bw(2),bw(3)+1:L]);
end
G=[A;B;C];
<a href="https://www..com/s?wd=TL&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">TL</a>=size(G,1);
%在父代和子代中選擇優良品種作為新的父代
[<a href="https://www..com/s?wd=dd&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">dd</a>,IX]=sort(G,2);
temp=[];
temp(1:<a href="https://www..com/s?wd=TL&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">TL</a>)=0;
for j=1:<a href="https://www..com/s?wd=TL&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">TL</a>
for i=1:L-1
temp(j)=temp(j)+d(IX(j,i),IX(j,i+1));
end
end
[DZ,IZ]=sort(temp);
A=G(IZ(1:w),:);
end
path=IX(IZ(1),:)
% for i=1:length(path)
% path(i)=path(i)-1;
% end
% path=path(2:end-1);
lmin=0;l=0;
for j=1:(length(path)-1)
<a href="https://www..com/s?wd=t1&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">t1</a>=path(j);t2=path(j+1);
l=d(<a href="https://www..com/s?wd=t1&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">t1</a>,t2);
lmin=lmin+l;
end
xx=sj0(path,1);yy=sj0(path,2);
plot(xx,yy,'r-o');
axis equal
toc
⑤ 急求java代碼:遺傳演算法解決車輛路徑問題。。
把這個地址的程序http://..com/question/340500887.html 中,這一句public void print(){
改成public void print(){}加一個大括弧就可以運行了。
⑥ 怎麼在matlab中運用遺傳演算法求解車輛最短路徑問題
matlab相關問題,建議去技術鄰的社區論壇問問,都是這個領域的大咖,希望能幫到你
⑦ 急求車輛路徑問題遺傳演算法的matlab代碼!!!!
python">function[path,lmin]=ga(data,d)%data為點集,d為距離矩陣,即賦權圖
tic
%======================
sj0=data;%開環最短路線
%=================================
%sj0=[data;data(1,:)];%閉環最短路線
%=========================
x=sj0(:,1);y=sj0(:,2);
N=length(x);
%=========================
%d(N,:)=d(1,:);%閉環最短路線
%d(:,N)=d(:,1);%距離矩陣d
%======================
L=N;%sj0的長度
w=800;dai=1000;
%通過改良圈演算法選取優良父代A
fork=1:w
c=randperm(L-2);
c1=[1,c+1,L];
flag=1;
whileflag>0
flag=0;
form=1:L-3
forn=m+2:L-1
ifd(c1(m),c1(n))+d(c1(m+1),c1(n+1))<d(c1(m),c1(m+1))+d(c1(n),c1(n+1))
flag=1;
c1(m+1:n)=c1(n:-1:m+1);
end
end
end
end
J(k,c1)=1:L;
end
J=J/L;
J(:,1)=0;J(:,L)=1;
rand('state',sum(clock));
%遺傳演算法實現過程
A=J;
fork=1:dai%產生0~1間隨機數列進行編碼
B=A;
c=randperm(w);
%交配產生子代B
fori=1:2:w
F=2+floor(100*rand(1));
temp=B(c(i),F:L);
B(c(i),F:L)=B(c(i+1),F:L);
B(c(i+1),F:L)=temp;
end;
%變異產生子代C
by=find(rand(1,w)<0.1);
iflength(by)==0
by=floor(w*rand(1))+1;
end
C=A(by,:);
L3=length(by);
forj=1:L3
bw=floor(1+fix(rand(1,3)*N));%產生1-N的3個隨機數
bw=sort(bw);
C(j,:)=C(j,[1:bw(1)-1,bw(2)+1:bw(3),bw(1):bw(2),bw(3)+1:L]);
end
G=[A;B;C];
TL=size(G,1);
%在父代和子代中選擇優良品種作為新的父代
[dd,IX]=sort(G,2);
temp=[];
temp(1:TL)=0;
forj=1:TL
fori=1:L-1
temp(j)=temp(j)+d(IX(j,i),IX(j,i+1));
end
end
[DZ,IZ]=sort(temp);
A=G(IZ(1:w),:);
end
path=IX(IZ(1),:)
%fori=1:length(path)
%path(i)=path(i)-1;
%end
%path=path(2:end-1);
lmin=0;l=0;
forj=1:(length(path)-1)
t1=path(j);t2=path(j+1);
l=d(t1,t2);
lmin=lmin+l;
end
xx=sj0(path,1);yy=sj0(path,2);
plot(xx,yy,'r-o');
axisequal
toc
代碼親自前幾天還用來著,絕對可用
⑧ 車輛路徑問題的車輛路徑問題的發展
1959年Dantzig和Ramse首次對閉合式VRP進行了研究,描述的是將汽油送往各個加油站的實際問題,並首次提出了相應的數學規劃模型以及求解演算法。
1964年,Clark和Wright[4]一種對Dantzig-Ramse方法改進的有效的啟發式演算法Clark-Wright節約演算法。
正是由於以上兩篇開創性論文的發表,使得VRP成為運籌學以及組合優化領域的前沿和研究熱點課題。
1969年,Christofides和Eilon應用2-opt[5]和3-opt[6]處理車輛路徑問題。
1970年,提出了兩階段方法求解車輛路徑問題,包括先分組後定路線(clusterfirst-route second)和先定路線後分組(routefirst-cluster second)兩種啟發式策略。
1981年,Fisher和Jaikumar提出以數學規劃為主的最優化方法來處理包含大約50個顧客點的問題,同樣其運算效率是一個亟待解決的問題。同年,Gullen,Jarvis和Ratliff建立了人機互動的啟發式方法。
1981年,Bodin and Golden將眾多的VRP求解方法進行了歸納。分為以下七種:數學解析法(Exact Procere);人機互動法(Interactive Optimization);先分群再排路線(Cluster First–Route Second);先排路線再分群(Route First–Cluster Second);節省法或插入法(Saving or Insertion);改善或交換法(Improvement or Exchanges);數學規劃近似法(Mathematical programming)。
1990年以來,人工智慧方法在解決組合優化問題上顯示出強大功能,在各個領域得到充分應用,很多學者也將人工智慧引入車輛路線問題的求解中,並構造了大量的基於人工智慧的啟發式演算法。 禁忌搜索法(TS)基本上是屬於一種人工智慧型(AI)的局部搜尋方法,Willard首先將此演算法用來求解VRP 。袁慶達[7]等設計了考慮時間窗和不同車輛類型的禁忌演算法,這種演算法主要採用GA方法產生初始解,然後禁忌演算法對初始解優化。模擬退火方法具有收斂速度快,全局搜索的特點,Osman[8]對VRP的模擬退火演算法進行了研究。遺傳演算法具有求解組合優化問題的良好特性,Holland首先採用遺傳演算法(GA)編碼解決VRPTW 問題。現在多數學者採用混合策略,分別採用兩種人工智慧方法進行路線分組和路線優化。Ombuki[9]提出了用GA進行路線分組,然後用TS方法進行路線優化的混合演算法。Bent和Van Hentenryck[10]則首先用模擬退火演算法將車輛路線的數量最小化,然後用大鄰域搜索法(largneighborhood search)將運輸費用降到最低。
綜合過去有關VRP的求解方法,可以將其分為精確演算法(exact algorithm)與啟發式演算法(heuristics),其中精確演算法有分支界限法、分支切割法、集合涵蓋法等;啟發式演算法有節約法、模擬退火法、確定性退火法、禁忌搜尋法、基因演算法、神經網路、螞蟻殖民演算法等。
⑨ 遺傳演算法車輛路徑一般可以發到哪個期刊上
物流技術的發展有助於企業降低物流成本、提高客戶滿意度、提高運作效率,車輛路徑問題的研究是提高物流技術的有效途徑。近年來,人們開始逐漸把注意力轉移到由實際生產生活衍生出的眾多車輛路徑問題上,並取得了大量優異的成績,隨之帶來了巨大的經濟效益。 本文主要研究了帶有軟時間窗的車輛路徑問題,在對相關模型深入研究的基礎之上建立了帶有軟時間窗的車輛路徑問題模型,並對求解帶軟時間窗車輛路徑問題的常用啟發式演算法進行了介紹。同時,本文在對遺傳演算法和模擬退火演算法研究的基礎上提出了一種改進遺傳演算法。該演算法結合了遺傳演算法的全局搜索功能和模擬退火演算法的局部搜索功能,試驗結果顯示改進遺傳演算法在功能上有顯著的提高。 在研究Solomon和Gehring標准算例的基礎上設計出一個具有一般性的多車場算例,並求解出該算例。本文對算例的求解步驟是:(1)結合Sweep演算法和Saving演算法把多車場化為單車場,彌補了單純用Sweep演算法的不足。(2)利用LINGO軟體分配可供車場使用的車輛,得到了滿足運輸要求下車輛使用費用最低的分配方案。(3)在求解具體車輛路徑問題時,利用改進掃描法進行具體分派。該改進掃描法最大限度的使用計算機的運算能力,盡量使車場的信息不被破壞,這樣得到最終的顧客點分配較使用傳統掃描法優秀。(4)運用C++編程和改進遺傳演算法對分解後的系統進行求解,得到了每輛車的運行路線和費用值,顯示了改進遺傳演算法的優越性。