资源简介
写毕业论文时写的蚁群算法求解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神经网络工具箱
相关资源
- matlab_OFDM调制解调(来自剑桥大学)
- Matlab路面裂缝识别69319
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
评论
共有 条评论