當前位置:首頁 » 遺傳因素 » 遺傳suanfavrp問題

遺傳suanfavrp問題

發布時間: 2021-03-30 19:14:08

① matlab怎麼運行基於遺傳演算法的vrp

function [x fx string]=fun_SuiJiSuanFa2(N,genLenth,Pc,Pm,downbound,upbound,generation)
%[x fx string]=fun_SuiJiSuanFa2(6,16,0.7,0.01,-3,3,100)
%f 表示函數
%N表示染色體種群大小
%genLenth表示染色體長度
%Pc表示交叉概率
%Pm表示突變概率
%downbound
%upbound
%generation循環代數

%進制編碼,此處編寫為二進制
num=2;
initdata=randi([0 num-1],N,genLenth);
%二進制編碼的權值
weight=(num).^(genLenth/2-1:-1:0);
weights=repmat(weight,N,1);
%保存每代的最好值和平均值,
meanally=zeros(1,generation);
maxally=zeros(1,generation);

Nowx=zeros(generation,genLenth);
for k=1:generation
%解碼後的整數
allx1=sum(initdata(:,1:genLenth/2).*weights,2);
allx2=sum(initdata(:,genLenth/2+1:end).*weights,2);
%映射到取值范圍
delt=(upbound-downbound)/(num^(genLenth/2)-1);
allx1=allx1.*delt+downbound;
allx2=allx2.*delt+downbound;
%染色體的適應性
ally=f(allx1,allx2);
%平均值,最大值
meanally(k)=mean(ally);
maxally(k)=max(ally);
%找下標,確定是哪條染色體
index=find(ally==maxally(k));
Nowx(k,:)=initdata(index(1),:);
%最大值沒有提高就取上次的
if(k>=2&&maxally(k)<maxally(k-1))
maxally(k)=maxally(k-1);
Nowx(k,:)=Nowx(k-1,:);
end
%染色體的適應性比率
ratio=ally./sum(ally);
%交叉,變異
%??交叉幾個,從第幾個開始。
%此處只交叉1個(總共才6個),隨機給一個。
sumRatio=cumsum(ratio);
data=zeros(N,genLenth);
for i=1:N/2
Select1=find(sumRatio>=rand);
Select2=find(sumRatio>=rand);
data(2*i-1,:)=initdata(Select1(1),:);
data(2*i,:)=initdata(Select2(1),:);
if(rand<Pc)
%交叉
location=randi([1,genLenth]);
temp=data(2*i-1,location:end);
data(2*i-1,location:end)=data(2*i,location:end);
data(2*i,location:end)=temp;
else
%變異
if(rand<Pm)
location=randi([1,genLenth]);
data(2*i-1,location)=1-data(2*i-1,location);
end
if(rand<Pm)
location=randi([1,genLenth]);
data(2*i,location)=1-data(2*i,location);
end
end
end
initdata=data;
end

fx=max(maxally);
lastIndex=find(maxally==fx);
string=Nowx(lastIndex(1),:);

x(1)=sum(string(1:genLenth/2).*weight).*(upbound-downbound)/(num^(genLenth/2)-1)+downbound;
x(2)=sum(string(1+genLenth/2:end).*weight).*(upbound-downbound)/(num^(genLenth/2)-1)+downbound;
%繪制性能圖
%figure,hold on;
clf;figure(1),hold on;
plot((1:k)',meanally,'b.-');
plot((1:k)',maxally,'r.:');
end

function fun=f(x,y)
fun=(1-x).^2.*exp(-x.^2-(1+y).^2)-(x-x.^3-y.^3).*exp(-x.^2-y.^2);
%fun=-(x-1).^2-3.*(y-2).^2+100;
end

② 求matlab關於VRP問題的遺傳演算法程序

不知你的matlab是否是7.0以上版本?
用ga工具箱應該是很方便的 你沒給出具體數據我示範不出來

關於限制條件
ga函數里直接有的,功能很全
要自己設計交叉演算法很困難,范圍夠大的話直接加個條件判斷-不行重來就可以了

初始種群:
for i=1:種群大小
while 條件不合格
p=randperm(n);
end
pop{i}=p;
end

③ 求一份遺傳演算法求解VRP問題的程序,用C++編程

這個網上搜索一下應該很多吧,比如這里:
http://download.csdn.net/detail/wb101010/3248991

④ 用遺傳演算法求解WEIGHT-VRP問題時,為什麼感覺沒有用到自己寫的很多約束條件

方向不對唄
或者有些條件是應對特殊情況的

⑤ 用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,則以進化過程中所得到的具有最大適應度個體作為最優解輸出,終止計算。

⑥ 有哪位大神有VRP問題的matlab程序啊最好有注釋!跪求!!

程序定做 找 我

⑦ 用遺傳演算法求解10城市旅行商問題,用matlab編程,要可以運行的程序,跪求,必有重謝

%螞蟻演算法
function [Shortest_Route,Shortest_Length]=anttsp(city,iter_max,m,Alpha,Beta,Rho,Q)
n=size(city,1);
d=zeros(n,n);
d=squareform(pdist(city));
Eta=1./d;
Tau=ones(n,n);
Tabu=zeros(m,n);
nC=1;
R_best=zeros(iter_max,n);
L_best=inf.*ones(iter_max,1);

while nC<=iter_max
route=[];
for i=1:ceil(m/n)
route=[route,randperm(n)];
end
Tabu(:,1)=(route(1,1: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 isempty(find(visited==k, 1))
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);
if isempty(Select)%是不是一定能保證Select不為空
Tabu(i,j)=round(1+(n-1)*rand);
else
next_visit=J(Select(1));
Tabu(i,j)=next_visit;
end
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),:);
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));
end

%%隨機演算法
%city是n行2列的矩陣,每一行表示一個城市的經緯度,一共n個城市
%time表示循環次數,越大,可能找到的路徑最短,當然裡面有隨機性。
function [Shortest_Route,Shortest_Length]=TSP_SuiJiSuanFa(city,times)
n=size(city,1);
d=squareform(pdist(city));
Shortest_Length=inf;
for i=1:times
tempRoute=randperm(n);
tempLength=0;
for j=1:n-1
tempLength=tempLength+d(tempRoute(j),tempRoute(j+1));
end
tempLength=tempLength+d(tempRoute(n),1);
if tempLength<Shortest_Length
Shortest_Length=tempLength;
Shortest_Route=tempRoute;
end
end

end

熱點內容
法國電影小男孩在農場遇到一隻白狗 發布:2024-08-19 08:36:47 瀏覽:594
微光上有什麼恐怖片 發布:2024-08-19 05:25:40 瀏覽:915
穿越香港鬼片滅鬼的小說 發布:2024-08-19 03:36:10 瀏覽:833
惡之花都敏秀姐姐扮演者 發布:2024-08-19 02:22:07 瀏覽:321
thai好看電影 發布:2024-08-18 11:34:37 瀏覽:795
電影內容女的是傻子容易尿褲子,男的很窮單身漢 發布:2024-08-18 10:31:36 瀏覽:129
雙機巨幕廳和4k廳哪個好 發布:2024-08-18 10:18:41 瀏覽:818
日本僵屍片上世紀 發布:2024-08-18 07:32:00 瀏覽:537
怪物 韓國電影在線 發布:2024-08-18 03:49:17 瀏覽:491
第九區一樣的 發布:2024-08-17 23:16:05 瀏覽:528