matlab 旅行商遗传算法,急求蚁群混合遗传算法在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=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)。
全部
總結
以上是生活随笔為你收集整理的matlab 旅行商遗传算法,急求蚁群混合遗传算法在matlab上的实现以解决TSP旅行商的问? 爱问知识人...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 经典说说带图片珍藏版有道理262个
- 下一篇: 有内涵的茶庄名字大全341个