資源簡介
寫畢業論文時寫的蟻群算法求解TSP,matlab實現,求解質量比較好且算法收斂速度比較快,有空用c實現一下會更快,hoho

代碼片段和文件信息
function?[L_ave_bestL_ave_aveR_bestL_bestL_aveShortest_RouteShortest_LengthFirst]=BB_AS(TSPfileNC_maxmAlphaBetaRhoWIN);
%%=========================================================================?
%%?BB_AS.m?
%%?BB-AS算法?
%%-------------------------------------------------------------------------?
%%?infile?TSP文件,字符串
%%?NC_max?算法迭代次數上限
%%?m?所采用的人工螞蟻的個數
%%?Alpha?信息素的冪
%%?Beta?啟發信息的冪
%%?Rho?信息素的揮發系數
%%?WIN?臨域窗口大小
%%?返回各代最優解均值:L_ave_best;各代解均值:L_ave_ave;各代最佳路線:R_best;
%%?各代最佳路線的長度:L_best;各代平均路線的長度:L_ave;
%%?全局最優路線:Shortest_Route;全局最優路線的長度:Shortest_Length;
%%?全局最優路線發現的起始代數:First
%%=========================================================================
[DimensionNodeCoord_2Name]?=?FileInput(TSPfile);%從文件讀入TSP數據
%%
%第一步:變量初始化=========================================================
n?=?Dimension;?
C?=?NodeCoord_2;
D?=?zeros(nn);%D表示完全圖的賦權鄰接矩陣
%%計算完全圖的賦權鄰接矩陣D
for?i=1:n
????for?j=i:n
????????if?i~=j?
???????????D(ij)=((C(i1)-C(j1))^2+(C(i2)-C(j2))^2)^0.5;?
???????????D(ji)=D(ij);
????????else
????????????D(ij)=inf;?
????????end
????end
end
[D_sortI]?=?sort(D2);%對D按照行排序,返回D_sort?=?D(I)
Eta?=?1./D;%Eta為啟發因子,這里設為距離的倒數?
Tau?=?ones(nn);%Tau為信息素矩陣pheromone?trails,各元素初始化為1?
Tabu?=?zeros(mn);%存儲并記錄m個螞蟻的路徑?
sum_TauEta?=?zeros(mn);
NC?=?1;%迭代計數器
out_NC?=?0;
out_NC_50?=?0;
R_best?=?zeros(NC_maxn);%各代最佳路線
L_best?=?inf.*ones(NC_max1);%各代最佳路線的長度?
L_ave?=?zeros(NC_max1);%各代路線的平均長度?
Tau_max?=?zeros(NC_max+11);%各代信息素上限
Tau_max(1)?=?1;
Tau_min?=?zeros(NC_max+11);
p_best?=?0.05;%
aa?=?p_best^(1./n);
bb?=?(1-?aa)/((n./2).*aa);
Tau_min(1)?=?Tau_max(1).*bb;%第一代信息素下限
L_best_global?=?inf;%當前全局最優
N_2opt?=?30;%2-opt的進行次數
c_2opt?=?0;
%偵查信息素初始化加權矩陣
symbol?=?zeros(nn);
search?=?zeros(nn);
K_search?=?0.8;
symbol?=?zeros(nn);
for?i?=?1:?n
????for?j?=?1:?n
????????if?find(I(i:)==j)?<=?WIN
????????????if?find(I(j:)==i)?<=?WIN
????????????????symbol(ij)?=?1;
????????????else
????????????????symbol(ij)?=?2;
????????????end
????????else
????????????if?find(I(j:)==i)?<=?WIN
????????????????symbol(ij)?=?3;
????????????else
????????????????symbol(ij)?=?4;
????????????end
????????end
????end
end
search?=?zeros(nn);
for?i?=?1?:?n
????for?j?=?1?:?n
????????if?symbol(ij)?==?4
????????????d_ij_wave?=?D(iI(i1));
????????????d_ji_wave?=?D(jI(j1));
????????????search(ij)?=?K_search*d_ij_wave*d_ji_wave/D(ij)^2;
????????else
????????????d_ij_wave?=?D(iI(i1));
????????????d_ji_wave?=?D(jI(j1));
????????????search(ij)?=?d_ij_wave*d_ji_wave/D(ij)^2;
????????end
????end
end
%初始化供查詢的ant_allow和NC_ant_allow
List?=?1:n;%
ant_allow_int?=?zeros(nn-1);%存儲并記錄m個螞蟻的現在的待訪問點
for?iter_ant?=?1:n
????delete_pos?=?find(List?==?iter_ant1);
????if?delete_pos?==1
????????ant_allow_int(iter_ant:)?=?List(2:n);
????elseif?delete_pos?==?n
????????ant_allow_int(iter_ant:)?=?List(1:n-1);
????else
????????ant_allow_int(iter_ant1:delete_pos-1)?=?List(1:delete_pos
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????374??2008-04-06?19:01??Oliver30.tsp
?????文件??????14589??2008-05-10?16:34??BB_AS.m
?????文件??????26729??2008-05-10?23:49??binbin_ant.m
?????文件????????579??1994-04-28?12:20??eil51.tsp
-----------?---------??----------?-----??----
????????????????42271????????????????????4
- 上一篇:信號能量計算
- 下一篇:BP神經網絡與MATLAB神經網絡工具箱
評論
共有 條評論