蚁群算法主要可以分为以下几个步骤:首先,蚁群中的每只蚂蚁都根据地面上信息素浓度的大小找出一条从原点通向终点的遍历所有城市一次的路径(构造路径);然后每只蚂蚁沿着自己刚刚找到的路径回溯,在路径经过的各个component(在旅行商问题中component指的是连接两座城市的那条边)上根据找到路径的整体质量(在旅行商问题中,质量好坏可以用路径总长度的大小来评价)分泌出相应浓度的信息素(更新信息素);当所有蚂蚁都找到了遍历所有城市的路径并通过回溯完成了信息素的更新工作后,所有component上的信息素按照一定的挥发率进行挥发。我们不断地重复上面的步骤直到找到一条从原点通向终点的最优路径为止。

除了信息素之外,在构造路径时我们还要计算一个经验值来帮助引导蚂蚁的路径选择,以旅行商问题为例,这个经验值通常是当前访问的城市到其它城市之间的直线距离,一个城市离蚂蚁当前所在的城市距离越近,这个城市作为蚂蚁下一个访问的城市的概率就越大。下面的公式体现了蚂蚁如何按照经验值和信息素这两个因素来计算某个城市作为下一个被访问到的城市的概率:

aaarticlea/png;base64,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" alt="" />

在上面的公式中k代表蚂蚁的编号,pij代表如果第k个蚂蚁当前位于城市i那么它下一个要访问的城市是j的概率。tij代表第i个城市通向第j个城市的边上存储的信息素的值,nij代表第i个城市通向第j个城市的边上的经验值(与i和j间的距离成反比),l指的是与i有边相连且从未访问过的城市。alpha和beta分别是两个参数,在分母中的l表示与i之间有边直接相连的城市编号。下面的代码给出了如何根据pij的值来选择下一个要访问的城市的伪代码:

 rouletteWheel =
states = ant.getUnvisitedStates()//找到与当前城市state有边直接相连且从未访问的城市,把这些城市编号存到states里
/*计算上面公式的分母*/
for newState in states do
rouletteWheel += Math.pow(getPheromone(state, newState), getParam('alpha'))
* Math.pow(calcHeuristicValue(state, newState), getParam('beta'))
end for randomValue = random()//产生一个0-1之间的随机数
wheelPosition = 0
/* 从候选城市的集合states中逐一取出城市编号newstate,计算上面公式的分子部分,
并把计算出来的值进行累加,直到取出某个城市newState
后的累加值(即wheelPosition的值)大于等于随机数randomValue为止,
返回这个newState作为下一个访问的城市
*/
for newState in states do
wheelPosition += (Math.pow(getPheromone(state, newState), getParam('alpha'))
* Math.pow(calcHeuristicValue(state, newState), getParam('beta')))/rouletteWheel
if wheelPosition >= randomValue do
return newState
end for

需要注意的是在旅行商问题中每座城市只能被访问一次,因此我们需要将已经访问过的城市做标记,在计算上面公式的分母时不去考虑这些到过的城市。

Exploration and Exploitation 策略

在选择下一个访问城市的问题上,有一种叫作Exploration和Exploitation的策略,该策略的思路是生成一个0-1的随机数,将这个随机数和一个预先设定好的0-1之间的参数进行比较,如果随机数<这个参数,则通过Exploitation选择下一个访问的城市,否则通过Exploration操作选择下一个城市。Exploratation这个操作就是上面代码所示的操作,而Exploitation操作指的是在和当前节点(state)有边直接相连的尚未被访问的候选城市(newState)中挑选

Math.pow(getPheromone(state, newState), getParam('alpha'))* Math.pow(calcHeuristicValue(state, newState), getParam('beta'))

最大的那个城市作为下一个访问的城市。

蚁群算法简介(part2: 蚁群算法之构造路径)的更多相关文章

  1. 蚁群算法简介(part3: 蚁群算法之更新信息素)

    信息素的局部更新策略   每只蚂蚁在构造出一条从起点到终点的路径后,蚁群算法还要求根据路径的总长度来更新这条路径所包含的每条边上信息素的浓度(在旅行商问题中每座城市是图中的一个节点,城市两两间有一条边 ...

  2. 从零开始学C++之STL(四):算法简介、7种算法分类

    一.算法 算法是以函数模板的形式实现的.常用的算法涉及到比较.交换.查找.搜索.复制.修改.移除.反转.排序.合并等等. 算法并非容器类型的成员函数,而是一些全局函数,要与迭代器一起搭配使用. 算法的 ...

  3. 排列熵算法简介及c#实现

    一.   排列熵算法简介: 排列熵算法(Permutation Entroy)为度量时间序列复杂性的一种方法,算法描述如下: 设一维时间序列: 采用相空间重构延迟坐标法对X中任一元素x(i)进行相空间 ...

  4. 7.redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?

    作者:中华石杉 面试题 redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗? 面试官心理分析 在前几年, ...

  5. AI - 机器学习常见算法简介(Common Algorithms)

    机器学习常见算法简介 - 原文链接:http://usblogs.pwc.com/emerging-technology/machine-learning-methods-infographic/ 应 ...

  6. Zookeeper简介与集群搭建【转】

    Zookeeper简介 Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理.命名.分布式同步.集群管理.数据库切换等服务.它不适合用来存储大量信息,可以用来存储一些配置.发布与订阅等少 ...

  7. PageRank 算法简介

    有两篇文章一篇讲解(下面copy)< PageRank算法简介及Map-Reduce实现>来源:http://www.cnblogs.com/fengfenggirl/p/pagerank ...

  8. zookeeper(分布式协调框架)简介与集群搭建

    ZooKeeper 的由来: Zookeeper最早起源于雅虎研究院的一个研究小组.在当时,研究人员发现,在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,但是这些系统往往都存在分布 ...

  9. 【异常检测】孤立森林(Isolation Forest)算法简介

    简介 工作的过程中经常会遇到这样一个问题,在构建模型训练数据时,我们很难保证训练数据的纯净度,数据中往往会参杂很多被错误标记噪声数据,而数据的质量决定了最终模型性能的好坏.如果进行人工二次标记,成本会 ...

随机推荐

  1. 基于Redis的爬虫平台的实现

    一.需求: 1.数据抓取:目标数据的下载.解析.入库功能. 2.数据服务:黑名单.灰名单等查询服务. 3.平台监控:平台各个模块的数据实时监控. 二.WEB端效果展示: 三.架构设计 下载器.解析器. ...

  2. 英康手机订单系统APP使用说明

    1.登陆手机APP 输入卖家提供的账号和密码登陆APP. 2.商品购买列表 可以在全部商品.促销商品.收藏商品.最近订购.再次购买等几种商品列表下把商品加入购物车: 3.加入商品到购物车 点击商品列表 ...

  3. 【原创】JMeter学习(三十七)Jmeter录制手机app脚本

    环境准备: 1.手机 2.wifi 3.Jmeter   具体步骤: 1.启动Jmeter: 2.“测试计划”中添加“线程组”: 3.“工作台”中添加“HTTP代理服务器”: 4.配置代理服务器:Gl ...

  4. git 添加 文件到GitHub

    用pycharm写代码,暂时不太了解它的版本控制方式,使用git托管到 GitHub. 1. 在被提交的文件夹下,运行 git  init,初始化git; 2. 添加需要提交的文件, git add ...

  5. xl2tp部署

    参考 http://blog.51yip.com/linux/1795.html 说到VPN,就会想到google,满心的疼.以前写过一篇关于vpn的文单,请参考:centos5.5 vpn 安装配置 ...

  6. js ajax同步请求造成浏览器假死的问题

    一.问题的起因 今天做一个需求遇到了这么个情况,就是用户个人中心有个功能,点击按钮,可以刷新用户当前的积分,这个肯定需要使用到ajax的同步请求了,当时喀喀喀三下五除二写玩了,大概代码如下: /** ...

  7. Thinkstation center M8600t装RHEL7不能联网,网卡驱动没装问题

    Thinkstation center M8600t装RHEL7时不能联网,配置ip也不可以,后来发现网卡驱动没有安装.可以通过装网卡驱动的方式解决问题,解决方法如下: root登录 lspci |  ...

  8. Python异步通信模块asyncore

    https://docs.python.org/2/library/asyncore.html This module provides the basic infrastructure for wr ...

  9. cookie和session简单的用法

    一.登录成功则设置cookie和session 二.在登录页判断是否已记住密码 三.在首页判断,和创建会话区 四.在首页执行并显示

  10. dmidecode常用参数

    dmidecode常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. dmidecode这个命令真是神器啊,他能快速的获取服务器的硬件信息,而且这个命令有很多的花式玩法,今 ...