當前位置:首頁 » 旅遊大全 » 遺傳演算法旅遊路線

遺傳演算法旅遊路線

發布時間: 2021-01-19 12:48:48

⑴ 多重旅行商問題(mTSP)的遺傳演算法

呃,像這種問題,10分是不夠的

⑵ 遺傳演算法求解對稱旅行商問題的C語言源代碼

一個遺傳演算法 50分

⑶ 用遺傳演算法求解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

⑷ 遺傳演算法和蟻群演算法在求解TSP問題上的對比分析

【原創】比遺傳演算法性能更好:蟻群演算法TSP(旅行商問題)通用matlab程序
聲明:本程序為本人原創,在研學論壇首次發表,本人保留一切權利,僅供學習交流用,如轉載請註明原作者!

function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q)
%%=========================================================================
%% ACATSP.m
%% Ant Colony Algorithm for Traveling Salesman Problem
%% ChengAihua,PLA Information Engineering University,ZhengZhou,China
%% Email:[email protected]
%% All rights reserved
%%-------------------------------------------------------------------------
%% 主要符號說明
%% C n個城市的坐標,n×2的矩陣
%% NC_max 最大迭代次數
%% m 螞蟻個數
%% Alpha 表徵信息素重要程度的參數
%% Beta 表徵啟發式因子重要程度的參數
%% Rho 信息素蒸發系數
%% Q 信息素增加強度系數
%% R_best 各代最佳路線
%% L_best 各代最佳路線的長度
%%=========================================================================

%%第一步:變數初始化
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

設置初始參數如下:
m=31;Alpha=1;Beta=5;Rho=0.1;NC_max=200;Q=100;
31城市坐標為:
1304 2312
3639 1315
4177 2244
3712 1399
3488 1535
3326 1556
3238 1229
4196 1004
4312 790
4386 570
3007 1970
2562 1756
2788 1491
2381 1676
1332 695
3715 1678
3918 2179
4061 2370
3780 2212
3676 2578
4029 2838
4263 2931
3429 1908
3507 2367
3394 2643
3439 3201
2935 3240
3140 3550
2545 2357
2778 2826
2370 2975

運行後得到15602的巡遊路徑,

⑸ 急求 蟻群混合遺傳演算法在matlab上的實現以解決TSP旅行商的問題 小弟感激不盡

建立m文件
function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q)

%%-------------------------------------------------------------------------

%% 主要符號說明

%% C n個城市的坐標,n×2的矩陣

%% NC_max 最大迭代次數

%% m 螞蟻個數

%% Alpha 表徵信息素重要程度的參數

%% Beta 表徵啟發式因子重要程度的參數

%% Rho 信息素蒸發系數

%% Q 信息素增加強度系數

%% R_best 各代最佳路線

%% L_best 各代最佳路線的長度

%%=========================================================================

%%第一步:變數初始化

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; %i=j時不計算,應該為0,但後面的啟發因子要取倒數,用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 %開始時置0

J(Jc)=k;

Jc=Jc+1; %訪問的城市個數自加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); %cumsum,元素累加即求和

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); %開始距離為0,m*1的列向量

for i=1:m

R=Tabu(i,:);

for j=1:(n-1)

L(i)=L(i)+D(R(j),R(j+1)); %原距離加上第j個城市到第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); %開始時信息素為n*n的0矩陣

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);

%此次循環在路徑(i,j)上的信息素增量

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)); %找到最佳路徑(非0為真)

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,'r')

title('平均距離和最短距離') %標題

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)],'g')

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)],'g')

hold on

end

title('旅行商問題優化結果 ')

建m文件
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)],'g')

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)],'g')

hold on

end

title('TSP問題優化結果 ')

命令窗口運行
C=[1304 2312
3639 1315
4177 2244
3712 1399
3488 1535
3326 1556
3238 1229
4196 1004
4312 790
4386 570
3007 1970
2562 1756
2788 1491
2381 1676
1332 695
3715 1678
3918 2179
4061 2370
3780 2212
3676 2578
4029 2838
4263 2931
3429 1908
3507 2367
3394 2643
3439 3201
2935 3240
3140 3550
2545 2357
2778 2826
2370 2975
];
m=31;Alpha=1;Beta=5;Rho=0.1;NC_max=200;Q=100;
[R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q)

⑹ 數學建模中旅遊路線需要的數學模型及演算法

你是不是武漢一所學校的啊 怎麼和我當年培訓的題目一樣啊 呵呵
這題目就是0 1規劃問題 你想讓軟體計算快一點,就用演算法簡化下,如遺傳演算法、蟻群演算法等等都行

⑺ 用遺傳演算法 解決旅行商問題,進化1000代,結果產生新解的代數一直都在剛開始幾代,而且不是最佳解,怎麼解

首先來,遺傳演算法實際使用上並不能保源證得到全局最優解。
出現這種情況說明遺傳演算法在開始前幾代已經達到並陷入一個局部解。而演算法的相關參數,例如交叉,變異概率等無法使演算法跳出局部解。因此可以嘗試改變遺傳演算法的參數。

⑻ 基於遺傳演算法的垃圾收運路線優化,用MATLAB實現!模型已建好。求代碼!!

你的數學公式呢。只要有數學模型就能在matlab裡面實現了

⑼ 遺傳演算法都能幹啥啊

遺傳演算法的抄應用領域:

計算機自動設計襲 (N700列車「氣動雙翼」的獨特空氣動力造型車鼻;是遺傳演算法運算結果)
工業工程與運作管理
物流系統設計
生產調度
製造系統控制
系統優化設計
汽車設計,包括材料選擇、多目標汽車組件設計、減輕重量等。
機電系統設計。
分布計算機網路的拓撲結構。
電路設計,此類用途的遺傳演算法叫做進化電路。
電子游戲設計,例如計算平衡解決方案。
機器智能設計和機器人學習。
模糊控制系統的訓練。
移動通訊優化結構。
時間表安排,例如為一個大學安排不沖突的課程時間表。
旅行推銷員問題。
神經網路的訓練,也叫做神經進化。
有什麼不懂的可以繼續提問。

⑽ 遺傳演算法怎麼解決機器人的路線規劃

傳統演算法雖然結果一定是最優解,但是運算量極大,可能會有lag。相反內,採用一定的智能演算法,雖然容每次選擇不一定最優,但是基本上都能快速(<=0.1s)判斷,而且只要設定一定的糾錯演算法,總體效率遠高於傳統演算法。

熱點內容
微山湖島旅遊攻略 發布:2021-03-16 21:45:18 瀏覽:387
適合78月份國內旅遊的地方 發布:2021-03-16 21:42:27 瀏覽:6
文化旅遊部單位 發布:2021-03-16 21:42:22 瀏覽:118
深圳周邊游推薦免費的 發布:2021-03-16 21:42:18 瀏覽:696
塑州旅遊景點 發布:2021-03-16 21:40:53 瀏覽:84
道觀河風景旅遊區發展前景 發布:2021-03-16 21:39:53 瀏覽:658
旅行社psd 發布:2021-03-16 21:39:03 瀏覽:174
常州旅遊業發展現狀 發布:2021-03-16 21:35:14 瀏覽:330
棋牌在線游戲必去797ag 發布:2021-03-16 21:33:30 瀏覽:217
有四個旅遊團三條路線 發布:2021-03-16 21:33:30 瀏覽:164