Chinaunix首页 | 论坛 | 博客
  • 博客访问: 324835
  • 博文数量: 31
  • 博客积分: 393
  • 博客等级: 一等列兵
  • 技术积分: 388
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-26 10:23
文章分类

全部博文(31)

文章存档

2013年(16)

2012年(15)

分类: 系统运维

2012-09-11 16:47:18

      蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法。它由Marco Dorigo1992年在他的中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。今天总体了解了这个算法的原理,启发很大!蚂蚁找食物估计大家都见过,但是谁又认证想过其原理,并且将其应用于实践呢?
 
【蚁群算法中的参数】
ALPHA : 启发因子,信息素的重要程度,一般取值1.0。
BETA:期望因子,城市间距离的重要程度,一般取值2.0。
ROU:信息素挥发系数,一般取值0.5。
ANT_COUNT : 蚂蚁数量,一般取值为城市数量的2/3。
CITY_COUNT:城市数量。
IT_COUNT:迭代次数,就是全部蚂蚁搜索多少次,取值自己设定。
Q : 信息素总量,取值多少对算法没什么影响。
 
【路径选择的期望】
p[i][j]=(T[i][j]^ALPHA)/(D[i][j]^BETA)  //信息素的量和城市距离间的取舍
Pij等于Tij的ALPHA次方除以Dij的BETA次方,式中
Pij是从城市i移动到城市j的概率值
Tij是城市i和城市j之间的信息素
Dij是城市i和城市j之间的距离
 
【轮盘选择】
假设p[0]点有如下的路径选择期望
p[0][1]=0.05
p[0][2]=0.02
p[0][3]=0.03
则:
pa=p[0][1]/(p[0][1]+p[0][2]+p[0][3])*100%=50%
pb=...=20%
pc=...=30%
在[0,1]之间取一个随机数R。然后用R减pa,如果减去后的结果小于等于0就选pb作
为下一个点,如果减去后还大于0,就继续再减去pc,…………,直到减去后的结果小于
等于0。
 
【蚁群算法解货郎挡问题的过程】
1.让每只蚂蚁都在图中遍历一边,记录路径和总路程L,并记录最短路径。每只蚂蚁遍历图如下:
  假设蚂蚁在i点,接下来可选点j、k、l
  1)计算p[i][j],p[i][k],p[i][l]
  2)用轮盘选择下一个点
  3)重复1,2直到到达目的地。
 
2.对图中的信息度进行更新( ANT-CYCLE)
  1)图中每个点统一信息度挥发ROU
  2)再对蚂蚁i经过的点增加Q/L,其中Q为信息素总量,L为总路程
3.重复蚁群遍历(1,2)IT_COUNT次,最终的最短路径即为近似全局最短路径。
 
【说明】
更新信息素有两种方式。
1、 ANT-CYCLE方式:蚂蚁周游完所有城市后才更新。
2、 ANT-STEP方式:蚂蚁每走一步就更新一下环境信息素。
实践表明ANT-CYCLE方式效果比较好,本文中也是采用的这种方式。

参考:蚁群算法教程 / Ver : 1.0.0 / Made by wugsh / 2011.12.07
阅读(2856) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~