蚁群算法的个人理解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

蚁群算法是一种寻找最优化路径的概率型算法,据说是是从灵感来源于蚂蚁在寻找食物过程中发现路径的行为。

一、蚁群寻找食物的路径

蚂蚁路过的地方会留下激素—信息素,后续的蚂蚁可以根据信息素来判断自己该怎么走。
刚开始时,第一批蚂蚁出动,此时地面没有任何信息素,所有蚂蚁随机选择一个方向去寻找食物,同时留下信息素,当蚂蚁寻找食物以后,原路返回。因为信息素随着时间的推移,会慢慢消散,所以寻找食物路程比较短的路径,信息素浓度会比较高,这对后面的蚂蚁寻找较优化路径提供了依据。
第二批蚂蚁出动时,地面已经有一些信息素了,大部分蚂蚁自然会选择信息素比较高,也就是路径比较短方向去寻找食物,但是自然也会存在比较“叛逆”的蚂蚁,选择信息素浓度低的,或者开创新路径。第二批蚂蚁返回以后,信息素浓度更新,时间会让没有蚂蚁走的路径的信息素慢慢消散,蚂蚁多的路径信息素浓度更高。若是那些“叛逆”的蚂蚁找到了更优的路径,因为路径短,耗时也短,所以信息素挥发少。这些对第三批的蚂蚁选择较优路径提供了更有力依据。
第三批重复第二批。。。。。

二、蚁群算法步骤

1.初始化

初始化蚂蚁的个数,每次派多少只蚂蚁,ant=常数;
初始化每个方向的信息素,方向i到j的信息素为 msg[i,j]=常数;
初始化启发式因子,ins[i,j]=1/d[i,j],d[i,j]是i到j的距离;
(这个我就有点好奇了,蚂蚁怎么知道距离数值的。。。。。。。哈哈哈,但是这个是算法有的,我也不懂为啥)
每只蚂蚁携带的信息素,Q=常数;
最多派多少批蚂蚁,也就是最多循环多少次,cycle=常数;
初始化信息素和启发式因子的重要程度 α=常数,β=常数;
定义信息素的挥发比例,μ=常数。

2.公式

1 方向选择概率公式

p[i,j]=msg[i,j]^α * ins[i,j]^β / ∑(msg[i,j]^α * ins[i,j]^β)

p[i,j]表示在i选择方向j的概率
∑(msg[i,j]^α * ins[i,j]^β) 对j求和,表示从i出发,所有方向的信息素和启发因子的关系总和

2 信息素更新公式

msg[i,j]=(1-μ)*msg[i,j]+∑Δmsg[i,j]

∑Δmsg[i,j] 表示经过一次遍历,所有蚂蚁在方向i到j留下的信息素的和,1-μ表示这段时间信息素的挥发

3 信息素增加公式

Δmsg[i,j]=∑( Q / ∑d[i,j]);

∑d[i,j] 表示某只蚂蚁选择的路径总和;
Q / ∑d[i,j] 表示这只蚂蚁的信息素平分到所有路径上,这样较短的路径分配的信息素也会比较高;
∑( Q / ∑d[i,j]) 对蚂蚁数ant求和,表示这次遍历,所有蚂蚁在方向i到j的信息素总和;

3.出发

1 给每只蚂蚁随机分配一个初始位置
2 建立一个禁忌表,表示这只蚂蚁已经路过的位置,初始位置和路过的位置都加入禁忌表。排除已经在禁忌表的位置,用方向选概率公式计算剩下方向的概率,根据轮盘法选择一个的方向前进。遍历所有位置,计算距离,求得这只蚂蚁留下的信息素 Δmsg[i,j] ;
3 让数量为ant的蚂蚁走完,统计信息素的总和 ∑Δmsg[i,j] ,记录这批蚂蚁的最短路径L,更新信息素msg[i,j];
4 如果遍历次数达到阈值,或者最短路径L达到目标值,误差在可接受范围,结束,输出最终结果L;否则重复1-3.

总结

算法新手入门,代码就不加了,只记录自己对算法的理解,如果有理解错误的地方,欢迎指正。
新手写文章,好难写啊啊啊啊啊!!!!
不过好处就是,写出来印象深一点,谁让我不想做笔记呢。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值