蚁群算法简介(part2: 蚁群算法之构造路径)
蚁群算法主要可以分为以下几个步骤:首先,蚁群中的每只蚂蚁都根据地面上信息素浓度的大小找出一条从原点通向终点的遍历所有城市一次的路径(构造路径);然后每只蚂蚁沿着自己刚刚找到的路径回溯,在路径经过的各个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: 蚁群算法之构造路径)的更多相关文章
- 蚁群算法简介(part3: 蚁群算法之更新信息素)
信息素的局部更新策略 每只蚂蚁在构造出一条从起点到终点的路径后,蚁群算法还要求根据路径的总长度来更新这条路径所包含的每条边上信息素的浓度(在旅行商问题中每座城市是图中的一个节点,城市两两间有一条边 ...
- 从零开始学C++之STL(四):算法简介、7种算法分类
一.算法 算法是以函数模板的形式实现的.常用的算法涉及到比较.交换.查找.搜索.复制.修改.移除.反转.排序.合并等等. 算法并非容器类型的成员函数,而是一些全局函数,要与迭代器一起搭配使用. 算法的 ...
- 排列熵算法简介及c#实现
一. 排列熵算法简介: 排列熵算法(Permutation Entroy)为度量时间序列复杂性的一种方法,算法描述如下: 设一维时间序列: 采用相空间重构延迟坐标法对X中任一元素x(i)进行相空间 ...
- 7.redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?
作者:中华石杉 面试题 redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗? 面试官心理分析 在前几年, ...
- AI - 机器学习常见算法简介(Common Algorithms)
机器学习常见算法简介 - 原文链接:http://usblogs.pwc.com/emerging-technology/machine-learning-methods-infographic/ 应 ...
- Zookeeper简介与集群搭建【转】
Zookeeper简介 Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理.命名.分布式同步.集群管理.数据库切换等服务.它不适合用来存储大量信息,可以用来存储一些配置.发布与订阅等少 ...
- PageRank 算法简介
有两篇文章一篇讲解(下面copy)< PageRank算法简介及Map-Reduce实现>来源:http://www.cnblogs.com/fengfenggirl/p/pagerank ...
- zookeeper(分布式协调框架)简介与集群搭建
ZooKeeper 的由来: Zookeeper最早起源于雅虎研究院的一个研究小组.在当时,研究人员发现,在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,但是这些系统往往都存在分布 ...
- 【异常检测】孤立森林(Isolation Forest)算法简介
简介 工作的过程中经常会遇到这样一个问题,在构建模型训练数据时,我们很难保证训练数据的纯净度,数据中往往会参杂很多被错误标记噪声数据,而数据的质量决定了最终模型性能的好坏.如果进行人工二次标记,成本会 ...
随机推荐
- SQLite - TRUNCATE TABLE
https://www.tutorialspoint.com/sqlite/sqlite_truncate_table.htm Unfortunately, no TRUNCATE TABLE in ...
- BI好比做菜
近日,珠海奥威软件宣布成功签约新世界中国地产(华南),成为该公司在商业智能项目上的坚实合作伙伴,共同打造基于以财务应用为主的决策分析平台. 公司简介 新世界中国地产(港股代号:917)为香港上市公司新 ...
- 数据库触发器inserted和deleted详解
create trigger updateDeleteTime on user for update as begin update user set UpdateTime=(getdate()) ...
- Ubuntu16.04安装vim插件YouCompleteMe
原文 1 下载 git clone --recursive git://github.com/Valloric/YouCompleteMe 如果执行该命令没报错, 就ok了. 但是中途有可能会断掉, ...
- Linux (Centos)操作MySql命令
1.安装MySql服务端命令: yum install mysql-server yum install mysql-devel 2.安装MySql客户端 yum install mysql 3.启动 ...
- iOS 如何在Label中显示html的文本
if (self.messageModel) { NSString * htmlString = self.messageModel.contentText; NSAttributedString * ...
- 使用Struts 2防止表单重复提交
用户重复提交表单在某些场合将会造成非常严重的后果.例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次.因此,重复提 ...
- 基于ssh框架的在线考试系统开发的质量属性
我做的系统是基于ssh框架的在线考试系统.在线考试系统有以下几点特性:(1)系统响应时间需要非常快,可以迅速的出题,答题.(2)系统的负载量也需要非常大,可以支持多人在线考试(3)还有系统的安全性也需 ...
- SWFUpload
引用:http://www.cnblogs.com/2050/archive/2012/08/29/2662932.html SWFUpload是一个flash和js相结合而成的文件上传插件,其功能非 ...
- AppCan JSSDK模块扩展
1. 从源码开始: 我们先看源码的8188行到9525行: window.appcan && appcan.define('window',function($,export ...