蚁群算法求解TSP问题的matlab程序(较好的算例)
蚁群算法求解TSP问题的matlab程序(较好的算例)
%蚁群算法求解TSP问题的matlab程序
clear all
close all
clc
%初始化蚁群
m=31;%蚁群中蚂蚁的数量,当m接近或等于城市个数n时,本算法可以在最少的迭代次数内找到最优解
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];%城市的坐标矩阵
Nc_max=200;%最大循环次数,即算法迭代的次数,亦即蚂蚁出动的拨数(每拨蚂蚁的数量当然都是m)
alpha=1;%蚂蚁在运动过程中所积累信息(即信息素)在蚂蚁选择路径时的相对重要程度,alpha过大时,算法迭代到一定代数后将出现停滞现象
beta=5;%启发式因子在蚂蚁选择路径时的相对重要程度
rho=0.5;%0<rho<1,表示路径上信息素的衰减系数(亦称挥发系数、蒸发系数),1-rho表示信息素的持久性系数
Q=100;%蚂蚁释放的信息素量,对本算法的性能影响不大
%变量初始化
n=size(C,1);%表示TSP问题的规模,亦即城市的数量
D=ones(n,n);%表示城市完全地图的赋权邻接矩阵,记录城市之间的距离
for i=1:n
for j=1:n
if i<j
D(i,j)=sqrt((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2);
end
D(j,i)=D(i,j);
end
end
eta=1./D;%启发式因子,这里设为城市之间距离的倒数
pheromone=ones(n,n);%信息素矩阵,这里假设任何两个城市之间路径上的初始信息素都为1
tabu_list=zeros(m,n);%禁忌表,记录蚂蚁已经走过的城市,蚂蚁在本次循环中不能再经过这些城市。当本次循环结束后,禁忌表被用来计算蚂蚁当前所建立的解决方案,即经过的路径和路径的长度
Nc=0;%循环次数计数器
routh_best=zeros(Nc_max,n);%各次循环的最短路径
length_best=ones(Nc_max,1);%各次循环最短路径的长度
length_average=ones(Nc_max,1);%各次循环所有路径的平均长度
while Nc<Nc_max
%将m只蚂蚁放在n个城市上
rand_position=[];
for i=1:ceil(m/n)
rand_position=[rand_position,randperm(n)];
end
tabu_list(:,1)=(rand_position(1:m))';%将蚂蚁放在城市上之后的禁忌表,第i行表示第i只蚂蚁,第i行第一列元素表示第i只蚂蚁所在的初始城市
%m只蚂蚁按概率函数选择下一座城市,在本次循环中完成各自的周游
for j=2:n
for i=1:m
city_visited=tabu_list(i,1:(j-1));%已访问的城市
city_remained=zeros(1,(n-j+1));%待访问的城市
probability=city_remained;%待访问城市的访问概率
cr=1;
for k=1:n%for循环用于求待访问的城市。比如如果城市个数是5,而已访问的城市city_visited=[2 4],则经过此for循环后city_reman
你可能喜欢
- 移动机器人路径规划
- 算法matlab代码
- 算法代码
- 遗传算法matlab
- 移动机器人路径规划概述 与人工势场法29页
- 移动机器人路径规划技术的现状与发展7页
- 移动机器人路径规划方法研究5页
- 一种移动机器人的路径规划算法3页
- 一种改进的移动机器人全局路径规划算法3页
- 平面移动机器人最短路径规划的几何算法研究5页
- 萤火虫GSO算法matlab代码3页
- 插值算法与matlab代码8页
- 粒子群算法的matlab代码实现5页
- 遗传算法matlab代码11页
- 粒子群算法matlab代码19页
- lle算法详解及matlab代码实现3页
- 免疫算法C代码4页
- java排序算法代码11页
- Dijkstra算法C代码4页
- 蚁群算法简单代码2页
- 常见算法代码总结4页
- C语言二分法查找算法代码2页


