%蚂蚁算法test
%用产生的一个圆上的十个点来检验蚂蚁算法
clc
clear
%参数
alpha = 1 ; %信息素指数
beta = 5 ; %启发指数
rho = 0.5 ; %挥发系数
n = 16 ; %城市个数
k = 20 ; %迭代次数
m = n - 1 ; %蚂蚁只数,这里取比城市数目少一的蚂蚁只数
Q = 100 ;
bestr = inf ;
%产生一个圆上的十个点
x = zeros(1,n) ;
y = x ;
for i = 1 : (n/2)
x(i) = rand * 20 ;
y(i) = sqrt(100 - (x(i) - 10) ^ 2) + 10;
end
for i = (n/2 + 1) : n
x(i) = rand * 20 ;
y(i) = - sqrt(100 - (x(i) - 10) ^ 2) + 10;
end
plot(x,y,'.') ;
%计算距离
d = zeros(n,n) ;
for i = 1 : n
for j = 1 : n
d(i,j) = sqrt( ( x(i) - x(j) ) ^ 2 + ( y(i) - y(j) ) ^ 2) ;
end
end
temp = min(d) ;
dmin = temp(1) ;
tau = ones(n,n) ;
%tau = tau ./ (n * dmin) ; %初始化tau信息素矩阵
%开始迭代
for i = 1 : k
%初始化
visited = zeros(m,n) ; %用visited 来储存所有蚂蚁走过的城市 m×n 其中未到达的城市为0
visited(:,1) = (randperm(n,m))'; %将m只蚂蚁随机放在n座城市 即产生一列1到n的随机数进行第一列数据的更新
for b = 2 : n %所有蚂蚁都走到第b个城市时
current = visited(:,(b-1)) ; %所有蚂蚁现在所在城市 m×1
allow = zeros(m,(n - b + 1)) ;
for a = 1 : m
j = 1 ;
for s = 1 : n
if length(find(visited(a,:) == s)) == 0
allow(a,j) = s ;
j = j + 1 ;
end
end
end
l = n-b+1 ;
for a = 1 : m %分析第a只蚂蚁
p = zeros(1,l) ;
for j = 1 : l %根据下式来选择下一个城市
p(j) = ( ( tau( current(a,1) , allow(a,j) ) ) ^ alpha ) * ( ( 1 / d( current(a,1) , allow(a,j) ) ) ^ beta ) ;
end
p = p ./ sum(p) ; %采用轮盘赌的方式
p = cumsum(p) ;
pick = rand ;
for c = 1 : l
if pick < p(c)
visited(a,b) = allow(a,c) ; %找到符合要求的城市 并 记入蚂蚁a的路径中
break ;
end
end
end
end
%计算每只蚂蚁所走的路径总长
L = zeros(1,m) ;
for a = 1 : m
t = d(visited(a,n),visited(a,1)) ;
for b = 1 : (n - 1)
t = t + d(visited(a,b),visited(a,(b + 1)));
end
L(a) = t ;
end
[newbestr,newbestant] = min(L) ; %寻本次迭代最短路径及其相应蚂蚁
if newbestr < bestr %到目前为止最优值的保存
bestr = newbestr ;
bestroad = visited(newbestant,:) ;
end
%离线更新信息素矩阵
%挥发
for a = 1 : m
tau(visited(a,n),visited(a,1)) = tau(visited(a,n),visited(a,1)) * (1 - rho) ;
for b = 1 : (n - 1)
tau(visited(a,b),visited(a,(b + 1))) = tau(visited(a,b),visited(a,(b + 1))) * (1 - rho) ;
end
end
%加强
tau(visited(newbestant,n),visited(newbestant,1)) = tau(visited(newbestant,n),visited(newbestant,1)) + Q / L(newbestant) ;
for b = 1 : (n - 1)
tau(visited(newbestant,b),visited(newbestant,(b + 1))) = tau(visited(newbestant,b),visited(newbestant,(b + 1))) + Q / L(newbestant) ;
end
end
bestr
bestx = zeros(1,n) ;
besty = zeros(1,n) ;
for i = 1 : n
bestx(i) = x(bestroad(i)) ;
besty(i) = y(bestroad(i)) ;
end
bestx = [bestx,bestx(1)] ;
besty = [besty,besty(1)] ;
plot(bestx,besty,'-') ;
没有合适的资源?快使用搜索试试~ 我知道了~
mayisuanfa.rar_matlab滤镜_蚁群算法_蚂蚁算法 城市
共1个文件
txt:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 82 浏览量
2022-07-13
23:31:04
上传
评论
收藏 1KB RAR 举报
温馨提示
用matlab实现蚁群算法的源代码 蚁群算法的基本原理来源于自然界蚂蚁觅食的最短路径原理,蚂蚁在寻找食物源时,能在其走过的路径上释放一种蚂蚁特有的分泌物--信息素,使得一定范围内的其他蚂蚁能够察觉到并由此影响他们以后的行为。当一些路径上通过的蚂蚁越来越多时,其留下的信息素也越来越多,以致信息素强度增大,所以蚂蚁选择选该滤镜的概率也越高,从而更增加了该路径的信息素强度,这种选择过程被称为蚂蚁的自催化行为。由于其原理是一种正反馈机制,因此,也可将蚂蚁王国理解为所谓的增强型学习系统。
资源详情
资源评论
资源推荐
收起资源包目录
mayisuanfa.rar (1个子文件)
新建文本文档.txt 4KB
共 1 条
- 1
weixin_42653672
- 粉丝: 108
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0