遺傳演算法車輛路徑
❶ 急求matlab車輛調度遺傳演算法代碼,需求車輛行駛最優路徑。
這個要具體的問題才好設計,你的太泛
❷ 車輛路徑規劃問題程序設計目的及意義(含國內外的研究現狀分析)
我這里只有車輛路徑問題的國內外研究現狀。。。
❸ 沒學過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程序代碼能給我一份嗎,課程設計用,萬分感謝
我那最後弄得是假的,弄個假代碼,最後PS做的
❺ 用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,則以進化過程中所得到的具有最大適應度個體作為最優解輸出,終止計算。
❻ 我在做一個車輛路徑問題,用遺傳演算法的,不會MATLAB編程,有人能幫我一下嗎
% Optimizing a function using Simple Genetic Algorithm with elitist preserved
%Max f(x1,x2)=10-x1*x1-x2*x2+x1*x2; -2.0480<=x1,x2<=2.0480
clc;clear all;
format long;%Set the data format(設定數據顯示格式)
%parameters Initialization (初始化參數)
T=100;% Generation( 模擬代數)
N=80;% Population size ( 群體規模)
pm=0.05;pc=0.8;%Crossover and mutation probability(交叉變異概率)
umax=2.048;umin=-2.048;%Parameter range(參數取值范圍)
L=10;%Single parameter string length, the total coding length is 2L(單個參數字串長度,總編碼長度2L)
bval=round(rand(N,2*L));%Population Initialization(初始種群)
bestv=-inf;%Optimal fitness Initialization(最優適應度初值)
%Iteration stsar(迭代開始)
for ii=1:T
%Decoding, and the fitness calculation(解碼,計算適應度)
for i=1:N
y1=0;y2=0;
for j=1:1:L
y1=y1+bval(i,L-j+1)*2^(j-1);
end
x1=(umax-umin)*y1/(2^L-1)+umin;
for j=1:1:L
y2=y2+bval(i,2*L-j+1)*2^(j-1);
end
x2=(umax-umin)*y2/(2^L-1)+umin;
obj(i)=10-x1*x1-x2*x2+x1*x2; %The objective function(目標函數)
xx(i,:)=[x1,x2];
end
func=obj;%Objective function into the fitness function(目標函數轉換為適應度函數)
p=func./sum(func);
q=cumsum(p);%Cumulative(累加)
[fmax,indmax]=max(func);%seeking the best in this generation(求當代最佳個體)
if fmax>=bestv
bestv=fmax;%So far, the best fitness value(到目前為止最優適應度值)
bvalxx=bval(indmax,:);%So far the best bit string(到目前為止最佳位串)
optxx=xx(indmax,:);%So far the optimal parameters(到目前為止最優參數)
end
Bfit1(ii)=bestv; % So far the optimal parameters(存儲每代的最優適應度)
%%%%Genetic operation starts(遺傳操作開始)
%Roulette wheel selection(輪盤賭選擇)
for i=1:(N-1)
r=rand;
tmp=find(r<=q);
newbval(i,:)=bval(tmp(1),:);
end
newbval(N,:)=bvalxx;%Optimal retention(最優保留)
bval=newbval;
%Single-point crossover(單點交叉)
for i=1:2:(N-1)
cc=rand;
if cc<pc
point=ceil(rand*(2*L-1));%To obtain one integer from 1 to 2L-1(取得一個1到2L-1的整數)
ch=bval(i,:);
bval(i,point+1:2*L)=bval(i+1,point+1:2*L);
bval(i+1,point+1:2*L)=ch(1,point+1:2*L);
end
end
bval(N,:)=bvalxx;%Optimal retention(最優保留)
%Locus mutation(位點變異)
mm=rand(N,2*L)<pm;%N lines(N行)
mm(N,:)=zeros(1,2*L);%Variation of the last line not change set to 0(最後一行不變異,強制賦0)
bval(mm)=1-bval(mm);
end
%Output(輸出)
plot(Bfit1);% Draw the best fitness evolution curves(繪制最優適應度進化曲線)
bestv %Output the optimal fitness value(輸出最優適應度值)
這個遺傳的我沒試過
下面這個是蟻群的結果
function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q)
%%=========================================================================
%% ACATSP.m
%%-------------------------------------------------------------------------
%% 主要符號說明
%% C n個城市的坐標,n×2的矩陣
%% NC_max 最大迭代次數
%% m 螞蟻個數
%% Alpha 表徵信息素重要程度的參數
%% Beta 表徵啟發式因子重要程度的參數
%% Rho 信息素蒸發系數
%% Q 信息素增加強度系數
%% R_best 各代最佳路線
%% L_best 各代最佳路線的長度
%%=========================================================================
%%第一步:變數初始化
C=[1304,2312;3639,1315;4177,2244;3712,1399;3488,1535;3326,1556]
NC_max=200;
m=31;
Alpha=1;
Beta=5;
Rho=0.1;
Q=100;
n=size(C,1);%n表示問題的規模(城市個數)
D=zeros(n,n);%D表示完全圖的賦權鄰接矩陣
for i=1:n
for j=1:n
if i~=j
D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;
else
D(i,j)=eps;
end
D(j,i)=D(i,j);
end
end
Eta=1./D;%Eta為啟發因子,這里設為距離的倒數
Tau=ones(n,n);%Tau為信息素矩陣
Tabu=zeros(m,n);%存儲並記錄路徑的生成
NC=1;%迭代計數器
R_best=zeros(NC_max,n);%各代最佳路線
L_best=inf.*ones(NC_max,1);%各代最佳路線的長度
L_ave=zeros(NC_max,1);%各代路線的平均長度
while NC<=NC_max%停止條件之一:達到最大迭代次數
%%第二步:將m只螞蟻放到n個城市上
Randpos=[];
for i=1:(ceil(m/n))
Randpos=[Randpos,randperm(n)];
end
Tabu(:,1)=(Randpos(1,1:m))';
%%第三步:m只螞蟻按概率函數選擇下一座城市,完成各自的周遊
for j=2:n
for i=1:m
visited=Tabu(i,1:(j-1));%已訪問的城市
J=zeros(1,(n-j+1));%待訪問的城市
P=J;%待訪問城市的選擇概率分布
Jc=1;
for k=1:n
if length(find(visited==k))==0
J(Jc)=k;
Jc=Jc+1;
end
end
%下面計算待選城市的概率分布
for k=1:length(J)
P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta);
end
P=P/(sum(P));
%按概率原則選取下一個城市
Pcum=cumsum(P);
Select=find(Pcum>=rand);
to_visit=J(Select(1));
Tabu(i,j)=to_visit;
end
end
if NC>=2
Tabu(1,:)=R_best(NC-1,:);
end
%%第四步:記錄本次迭代最佳路線
L=zeros(m,1);
for i=1:m
R=Tabu(i,:);
for j=1:(n-1)
L(i)=L(i)+D(R(j),R(j+1));
end
L(i)=L(i)+D(R(1),R(n));
end
L_best(NC)=min(L);
pos=find(L==L_best(NC));
R_best(NC,:)=Tabu(pos(1),:);
L_ave(NC)=mean(L);
NC=NC+1
%%第五步:更新信息素
Delta_Tau=zeros(n,n);
for i=1:m
for j=1:(n-1)
Delta_Tau(Tabu(i,j),Tabu(i,j+1))=Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i);
end
Delta_Tau(Tabu(i,n),Tabu(i,1))=Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i);
end
Tau=(1-Rho).*Tau+Delta_Tau;
%%第六步:禁忌表清零
Tabu=zeros(m,n);
end
%%第七步:輸出結果
Pos=find(L_best==min(L_best));
Shortest_Route=R_best(Pos(1),:)
Shortest_Length=L_best(Pos(1))
subplot(1,2,1)
DrawRoute(C,Shortest_Route)
subplot(1,2,2)
plot(L_best)
hold on
plot(L_ave)
function DrawRoute(C,R)
%%=========================================================================
%% DrawRoute.m
%% 畫路線圖的子函數
%%-------------------------------------------------------------------------
%% C Coordinate 節點坐標,由一個N×2的矩陣存儲
%% R Route 路線
%%=========================================================================
N=length(R);
scatter(C(:,1),C(:,2));
hold on
plot([C(R(1),1),C(R(N),1)],[C(R(1),2),C(R(N),2)])
hold on
for ii=2:N
plot([C(R(ii-1),1),C(R(ii),1)],[C(R(ii-1),2),C(R(ii),2)])
hold on
end
❼ 急求車輛路徑問題遺傳演算法的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
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
代碼親自前幾天還用來著,絕對可用
❽ 無人車輛利用遺傳演算法的路徑規劃程序,用c/c++要比java方便嗎,我一直用java
一樣,java改C++也很容易。嵌入式用java的也很多。不過用C,C++開發嵌入式更直接,代碼編譯完就能運行,用java需要一個虛擬機。手機、機頂盒都有java的。android可以用於嵌入式,也是java的。
❾ 急求java代碼:遺傳演算法解決車輛路徑問題。。
把這個地址的程序http://..com/question/340500887.html 中,這一句public void print(){
改成public void print(){}加一個大括弧就可以運行了。
❿ 車輛路徑問題的車輛路徑問題的發展
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),其中精確演算法有分支界限法、分支切割法、集合涵蓋法等;啟發式演算法有節約法、模擬退火法、確定性退火法、禁忌搜尋法、基因演算法、神經網路、螞蟻殖民演算法等。