资源简介
写毕业论文时写的蚁群算法求解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神经网络工具箱
相关资源
- BP神经网络与MATLAB神经网络工具箱
- EM算法的matlab实现
- Matlab绘图教程(大量PPT)
- 泊松抠图的matlab代码
- 熵值法的高效matlab源程序
- matlab中tstem函数
- 超分辨率的matlab工具箱
- 低通抽样定理 matlab实现
- 灰度AGV路径识别matlab程序
- MATLAB R2017b linux
- 长周期光栅光谱matlab仿真
- MATLAB中图像分割迭代法求阈值
- jpeg图像压缩matlab程序
- 生物地理学算法BBO及与差分进化算法
- 用matlab实现角点检测源代码
- MATLAB实现Canny图像边缘检测
- 基于Lucas–Kanade算法的光流估计MATLA
- MDS无线传感器网络定位算法MATLAB程序
- 数字锁相环DPLL matlab 仿真代码
- Matlab常微分方程的解法
- radon变换车牌倾斜校正Matlab代码
- K-L变换算法
- 求解二次规划问题的拉格朗日及有效
- 雷电感应电压matlab
- 有约束的最小最大值matlab程序
- bpsk在高斯白噪声信道中调制解调MAT
- 基于MATLAB的图像增强处理
- 卡尔曼滤波算法原理及MATLAB源程序
- MATLAB 软件最大功率跟踪
- MATLAB软件BOOST电路仿真
评论
共有 条评论