智能计算之蚁群算法(ACO)介绍

目录

1. 简介

2. 基本思想

3. 研究进展

4. 基本流程

(1)路径构建

(2)信息素更新

​5. 应用举例

6.  改进版

6.1 精华蚂蚁系统

6.2 基于排列的蚂蚁系

6.3 最大最小蚂蚁系

6.4 蚁群系统

7. 参数设置​编辑

8. 练习题


1. 简介

        蚁群算法(Ant Colony Optimization,ACO)由Dorigo 等人于1991年在第一届欧洲人工生命会议(European Conference on Artificial Intelligence,ECAL)上提出,是模拟自然界真实蚂蚁觅食过程的一种随机搜索算法。蚁群算法与遗传算法(GeneticAlgorithm,GA)、粒子群优化算法(Particle Swarm Optimization,PSO)、免疫算法(Immune Algorithm,IA)等同属于仿生优化算法,具有鲁棒性强、全局搜索、并行分布式计算、易与其他方法结合等优点,在典型组合优化问题如旅行商问题(Traveling SalesmanProblem,TSP)、车辆路径问题(Vehicle Routing Problem,VRP),车间作业调度问题(Job-shop Scheduling Problem,JSP)和动态组合规划问题如通信领域的路由问题中均得到了成功的应用。

2. 基本思想

        在自然界中,蚂蚁群体在寻找食物的过程中,无论是蚂蚁与蚂蚁之间的协作还是蚂蚁与环境之间的交互均依赖于一种被称为信息素(Pheromone)的物质实现蚁群的间接通信,从而通过合作发现从蚁穴到食物源的最短路径。

        蚂蚁在寻找食物的过程中往往是随机选择路径的,但它们能感知当前地面上的信息素浓度,并倾向于往信息素浓度高的方向行进。信息素由蚂蚁自身释放,是实现蚁群内间接通信的物质。由于较短路径上蚂蚁的往返时间比较短,单位时间内经过该路径的蚂蚁多,所以信息素的积累速度比较长路径快。因此,当后续蚂蚁在路口时,就能感知先前蚂蚁留下的信息,并倾向于选择一条较短的路径前行。这种正反馈机制使得越来越多的蚂蚁在巢穴与食物之间的最短路径上行进。由于其他路径上的信息素会随着时间蒸发,最终所有的蚂蚁都在最优路径上行进。

通过对自然界蚁群觅食过程进行抽象建模,我们可以对蚁群觅食现象和蚁群优化算法中的各个要素建立一 一 对应关系:

3. 研究进展

4. 基本流程

蚂蚁系统(Ant System,AS)是最基本的ACO算法,是以TSP作为应用实例提出的。

AS对于TSP的求解流程大致可分为两步:路径构建信息素更新

(1)路径构建

伪随机比例选择规则(random proportional)。

        对于每只蚂蚁k,路径记忆向量R^k按照访问顺序记录了所有k已经经过的城市序号。设蚂蚁k当前所在城市为i,则其选择城市j作为下一个访问对象的概率如上式。J_k\left ( i \right )表示从城市i可以直接到达的、且又不在蚂蚁访问过的城市序列R^k中的城市集合。η(i, j)是一个启发式信息,通常由\eta\left ( i,j \right )=1/d_{ij}直接计算。\tau (i,j)表示边(i, j)上的信息素量。

        长度越短、信息素浓度越大的路径被蚂蚁选择的概率越大。a和b是两个预先设置的参数,用来控制启发式信息与信息素浓度作用的权重关系。当a=0时,算法演变成传统的随机贪心算法,最邻近城市被选中的概率最大。当b=0时,蚂蚁完全只根据信息素浓度确定路径,算法将快速收敛,这样构建出的最优路径往往与实际目标有着较大的差异,算法的性能比较糟糕。

(2)信息素更新

  1. 在算法初始化时,问题空间中所有的边上的信息素都被初始化为\tau _0
  2. 算法迭代每一轮,问题空间中的所有路径上的信息素都会发生蒸发,我们为所有边上的信息素乘上一个小于1的常数。信息素蒸发是自然界本身固有的特征,在算法中能够帮助避免信息素的无限积累,使得算法可以快速丢弃之前构建过的较差的路径。
  3. 蚂蚁根据自己构建的路径长度在它们本轮经过的边上释放信息素。蚂蚁构建的路径越短、释放的信息素就越多。一条边被蚂蚁爬过的次数越多、它所获得的信息素也越多。
  4. 迭代(2),直至算法终止。

可以结合下面公式来看哦:

        m是蚂蚁个数;r是信息素的蒸发率,规定0<\rho\leqslant1\Delta\tau_k是第k只蚂蚁在它经过的边上释放的信息素量,它等于蚂蚁k本轮构建路径长度的倒数。C_k​表示路径长度,它是R^k中所有边的长度和。

5. 应用举例

接着,我们结合一个实例来做进一步介绍

步骤2.2中有提到轮盘赌法。是的,和我们遗传算法用的是一样的(当然后面新的方法会有不一样)。

轮盘赌法具体怎么操作,在这里稍微解释一下:
比方说,现在A占比为0.2,B占比为0.5,C占比为0.3。
则当你随机值大小位于为0-0.2时,选A,大小位于0.2-0.7时,选B,大小位于0.7-1.0时,选C。

6.  改进版

6.1 精华蚂蚁系统

        精华蚂蚁系统(Elitist Ant System,EAS)是对基础AS的第一次改进,它在原AS信息素更新原则的基础上增加了一个对至今最优路径的强化手段。

引入这种额外的信息素强化手段有助于更好地引导蚂蚁搜索的偏向,使算法更快收敛。

6.2 基于排列的蚂蚁系

        基于排列的蚂蚁系统(rank-based Ant System,AS_{rank})在AS的基础上给蚂蚁要释放的信息素大小加上一个权值,进一步加大各边信息素量的差异,以指导搜索。在每一轮所有蚂蚁构建完路径后,它们将按照所得路径的长短进行排名,只有生成了至今最优路径的蚂蚁和排名在前(ω-1)的蚂蚁才被允许释放信息素,蚂蚁在边(i, j)上释放的信息素 的权值由蚂蚁的排名决定。

        权值(ω−k)对不同路径的信息素浓度差异起到了一个放大的作用,AS_{rank}​能更有力度地指导蚂蚁搜索。

6.3 最大最小蚂蚁系

        最大最小蚂蚁系统(MAX-MIN Ant System,MMAS)在基本AS算法的基础上进行了四项改进:

  1. 只允许迭代最优蚂蚁(在本次迭代构建出最短路径的蚂蚁),或者至今最优蚂蚁释放信息素。(迭代最优更新规则和至今最优更新规则在MMAS中会被交替使用。)                        如果只使用至今最优更新规则进行信息素的更新,搜索的导向性很强,算法会很快收敛到T b T_bTb​附近;反之,如果只使用迭代最优更新规则,则算法的探索能力会得到增强,但收敛速度会下降。实验结果表明,对于小规模的TSP问题,仅仅使用迭代最优信息素更新方式即可。随着问题规模的增大,至今最优信息素规则的使用变得越来越重要。
  2. 信息素量大小的取值范围被限制在一个区间\left [\tau _{min},\tau _{max} \right ]内。                                                                                                                                 当信息素浓度也被限制在一个范围内以后,位于城市i的蚂蚁k选择城市j作为下一城市的概率也将被限制在一个区间内。算法有效避免了陷入停滞状态(所有蚂蚁不断重复搜索同一条路径)的可能性。
  3. (3)信息素初始值为信息素取值区间的上限,并伴随一个较小的信息素蒸发速率。                利好:增强算法在初始阶段的探索能力,有助于蚂蚁“视野开阔地”进行全局范围内的搜索。随后蚂蚁逐渐缩小搜索范围。
  4. (4)每当系统进入停滞状态,问题空间内所有边上的信息素量都会被重新初始化。(我们通常通过对各条边上信息素量大小的统计或是观察算法在指定次数的迭代内至今最优路径有无被更新来判断算法是否停滞。)                                                                                                有效地利用系统进入停滞状态后的迭代周期继续进行搜索,使算法具有更强的全局寻优能力。

6.4 蚁群系统

1997年,蚁群算法的创始人Dorigo在“Ant colony system: a cooperative learning approach to the traveling salesman problem”一文中提出了一种具有全新机制的ACO算法——蚁群系统(Ant Colony System,ACS),进一步提高了ACO算法的性能。

(1)使用一种伪随机比例规则(pseudorandom proportional)选择下城市节点,建立开发当前路径与探索新路径之间的平衡。

在这里插入图片描述

        q_0是一个[0, 1]区间内的参数,当产生的随机数q≤q_0 时,蚂蚁直接选择使启发式信息与信息素量的指数乘积最大的下城市节点,我们通常称之为开发(exploitation);反之,当产生的随机数q>q_0 时ACS将和各种AS算法一样使用轮盘赌选择策略,我们称之为偏向探索(bias exploration)。

        通过调整q_0,我们能有效调节“开发”与“探索”之间的平衡,以决定算法是集中开发最优路径附近的区域,还是探索其它的区域。

(2)使用信息素全局更新规则,每轮迭代中所有蚂蚁都已构建完路径后,在属于至今最优路径的边上蒸发和释放信息素。

在这里插入图片描述

         其中\Delta \tau _{b}(i,j)= 1 / C_b,不论是信息素的蒸发还是释放,都只在属于至今最优路径的边上进行,这里与AS有很大的区别。因为AS算法将信息素的更新应用到了系统的所有边上,信息素更新的计算复杂度为O(n^2),而ACS算法的信息素更新计算复杂度降低为O(n)。参数ρ代表信息素蒸发的速率,新增加的信息素 被乘上系数ρ后,更新后的信息素浓度被控制在旧信息素量与新释放的信息素量之间,用一种隐含的又更简单的方式实现了MMAS算法中对信息素量取值范围的限制。

(3)引入信息素局部更新规则,在路径构建过程中,对每一只蚂蚁,每当其经过一条边(i, j)时,它将立刻对这条边进行信息素的更新。

在这里插入图片描述

在这里插入图片描述
        信息素局部更新规则作用于某条边上会使得这条边被其他蚂蚁选中的概率减少。这种机制大大增加了算法的探索能力,后续蚂蚁倾向于探索未被使用过的边,有效地避免了算法进入停滞状态。

        顺序构建和并行构建。顺序构建是指当一只蚂蚁完成一轮完整的构建并返回到初始城市之后,下一只蚂蚁才开始构建;并行构建是指所有蚂蚁同时开始构建,每次所有蚂蚁各走一步(从当前城市移动到下一个城市)。对于ACS,要注意到两种路径构建方式会造成算法行为的区别。
在ACS中通常我们选择让所有蚂蚁并行地工作。

6.5 连续正交蚁群系统

        连续正交蚁群算法(Continuous Orthogonal Ant Colony, COAC):近年来,将应用领域扩展到连续空间的蚁群算法也在发展,连续正交蚁群就是其中比较优秀的一种。COAC通过在问题空间内自适应地选择和调整一定数量的区域,并利用蚂蚁在这些区域内进行正交搜索、在区域间进行状态转移、并更新各个区域的信息素来搜索问题空间中的最优解。
COAC的基本思想是利用正交试验的方法将连续空间离散化。

7. 参数设置
在这里插入图片描述

在这里插入图片描述

8. 练习题

洋洋就介绍到这里了,我也是初次学,请大家指教,有问题之间评论或私聊即可,看到就会回复哦,先说好,我不知我什么时候会上线哦,有时候一个星期也不来一次的。哈哈哈! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564712.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java try catch finally语句

在实际开发中&#xff0c;根据 try catch 语句的执行过程&#xff0c;try 语句块和 catch 语句块有可能不被完全执行&#xff0c;而有些处理代码则要求必须执行。例如&#xff0c;程序在 try 块里打开了一些物理资源&#xff08;如数据库连接、网络连接和磁盘文件等&#xff09…

linux代码_Sonar代码走查的配置(linux)

SonarQube是一个静态代码质量检查工具&#xff0c;可以检查出代码中明显或潜在问题。虽然偶尔它的判断会是错误的&#xff0c;但还是值得我们用。它能以比较基础的级别减少代码出错的可能&#xff0c;可以节省人工Review代码时间。它支持多种语言的检查。我这里的代码是java代码…

智能计算之粒子群算法(PSO)介绍

目录 1. 简介(思想) 2. 研究发展 3. 算法步骤 4. 应用举例 5. 粒子群优化算法的改进研究 5.1 理论改进 5.2 拓扑结构改进 5.3 混合算法改进 5.4 离散版本改进 6. 相关应用 7. 参数设置​ 1. 简介(思想) 粒子群优化算法&#xff08;Particle Swarm Optimization&…

passive模式 tcp_FTP主动模式和被动模式的比较

总是记不住FTP主动和被动模式的区别。放在这里&#xff0c;以备日后查阅。FTP是仅基于TCP的服务&#xff0c;不支持UDP。与众不同的是FTP使用2个端口&#xff0c;一个数据端口和一个命令端口(也可叫做控制端口)。通常来说这两个端口是21(命令端口)和20(数据端口)。但FTP工作方式…

Java 中 finally 与 return 的执行顺序详解

java方法是在栈幀中执行&#xff0c;栈幀是线程私有栈的单位&#xff0c;执行方法的线程会为每一个方法分配一小块栈空间来作为该方法执行时的内存空间&#xff0c;栈幀分为三个区域&#xff1a; 1 . 操作数栈&#xff0c;用来保存正在执行的表达式中的操作数&#xff0c;数据…

车辆工程用得到python吗_如今车辆工程真的不如以前了吗?

背景&#xff1a;合肥工业大学2015届毕业生&#xff0c;车辆工程专业&#xff0c;理科实验班&#xff0c;成绩排名专业10%以内&#xff0c;有推免研究生资格。 上面这些title虽然比不上985的&#xff0c;但在当年工大的各专业中&#xff0c;基本上是无敌的存在了。 然后当年我竟…

headfirstjava最新版本下载_读过HeadFirstJava的大神进来看看

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼线程一章有个聊天程序&#xff0c;我运行之后客户端没将服务器的内容显示在JTextArea中&#xff0c;求解答客户端程序import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import java.net.*;public…

python爬虫能秒杀么_面试题之用python爬取并夕夕不同时段秒杀商品信息

先上效果图吧&#xff08;因为确实也是刚入门&#xff0c;很多细节没有注意到的&#xff0c;各位尽管提出来&#xff09;并夕夕很多时候都在不停的有秒杀商品的活动&#xff0c;对于价格问题&#xff0c;我就没法讨论了&#xff0c;但是人家能吸引到这么多流量&#xff0c;真本…

Java throws和throw

throws 声明异常 当一个方法产生一个它不处理的异常时&#xff0c;那么就需要在该方法的头部声明这个异常&#xff0c;以便将该异常传递到方法的外部进行处理。使用 throws 声明的方法表示此方法不处理异常。throws 具体格式如下&#xff1a; returnType method_name(paramLi…

html 怎么让tr的css覆盖td的_通达OA上传漏洞之变量覆盖分析

作者&#xff1a;kw0ng开始通达OA上传到包含漏洞分析的文章已经有很多&#xff0c;本文重点分析&#xff0c;文件上传处决定路径信息是否回显的UPLOAD_MODE参数是怎么传递的。代码分析触发文件上传点位于/ispirit/im/upload.php中&#xff0c;服务端在接收文件信息的同时还需要…

怎么看电脑的hdmi是输出还是输入_高清hdmi矩阵切换器4进4出音视频方案介绍景阳华泰科技...

高清hdmi矩阵切换器4进4出多少钱&#xff1f;这就需要了解您需要哪种4进4出矩阵&#xff01;景阳华泰科技生产的矩阵分为两种形式&#xff0c;一种是我们近几十年来一直使用的一体机&#xff0c;高清HDMI矩阵切换器4进4出采用一体机结构&#xff0c;经济实惠&#xff0c;功能较…

专业音频如何把电平转换成dbu_谭俊峰|录课、买麦,你应该了解的音频常识

近来&#xff0c;有打算录录课、吹吹牛&#xff0c;于是想升级一下硬件。既然要录音&#xff0c;那搞个好一点儿的麦克风总是必要的。于是&#xff0c;上网去查。不查不知道&#xff0c;一查吓一跳。为啥呢&#xff1f;既不为产品的琳琅满目&#xff0c;也不为价格的云泥之别&a…

android 自定义进度条_第一百八十九回:Android中自定义ProgressBar三

各位看官们大家好&#xff0c;上一回中咱们说的是Android中自定义ProgressBar的例子&#xff0c;这一回咱们继续说该例子。闲话休提&#xff0c;言归正转。让我们一起Talk Android吧&#xff01;看官们&#xff0c;我们在上一回是通过自定义PrgressBar的方式给它添加了文字&…

Java信息验证

某仓库管理系统的登录界面中需要输入用户名和密码&#xff0c;其中用户名只能由 6~10 位数字组成&#xff0c;密码只能有 6 位&#xff0c;任何不符合用户名或者密码要求的情况都视为异常&#xff0c;并且需要捕获并处理该异常。 下面使用自定义异常类来完成对用户登录信息的验…

沉降观测曲线图 沉降观测汇总_这些沉降观测要求,工程人必须掌握!

1沉降观测的基本要求 1)仪器设备、人员素质的要求根据沉降观测精度要求高的特点&#xff0c;为能精确地反映出建(构)筑物在不断加荷下的沉降情况&#xff0c;一般规定测量的误差应小于变形值的1/10—1/20&#xff0c;为此要求沉降观测应使用精密水准仪(S1或S05级)&#xff0c;水…

rgb红色范围_【论文阅读18】RGB-D Object-Oriented Semantic Mapping

主要内容基于RGB-D数据的语义建图&#xff08;SLAM帮助语义&#xff09;。具体过程如下首先利用SSD执行单帧RGB图片&#xff08;2D&#xff09;物体检测。接着基于检测结果和深度信息&#xff0c;利用3D分割算法进一步分割3D点云。最终利用ORB-SLAM2的相机位姿信息将每帧的3D点…

Java的异常跟踪栈

异常对象的 printStackTrace() 方法用于打印异常的跟踪栈信息&#xff0c;根据 printStackTrace() 方法的输出结果&#xff0c;开发者可以找到异常的源头&#xff0c;并跟踪到异常一路触发的过程。 看下面用于测试 printStackTrace 的例子程序。 class SelfException extends…

7价 半导体掺杂_掺杂工艺(一)

概述半导体材料的独特性质之一是它们的导电性和导电类型(N型或P型)能被产生和控制。在本章中&#xff0c;描述在晶圆内和表面上特别的小块导电区和PN结的形成。介绍扩散和离子注入两种掺杂技术的原理和工艺。简介使晶体管和二极管工作的结构就是PN结。结(junction)就是富含电子…

数据增强_imgaug图像数据增强必备工具

导读我们经常会遇到训练模型时数据不够的情况&#xff0c;而且很多时候无法再收集到更多的数据&#xff0c;只能通过做一些数据增强或者其它的方法来合成一些数据。常用的数据增强方式有裁剪、旋转、缩放、亮度对比度色度饱和度变换、仿射变换、透视变换等&#xff0c;这篇文章…

Java类的封装

封装将类的某些信息隐藏在类内部&#xff0c;不允许外部程序直接访问&#xff0c;只能通过该类提供的方法来实现对隐藏信息的操作和访问。 封装的特点&#xff1a; 只能通过规定的方法访问数据。隐藏类的实例细节&#xff0c;方便修改和实现。实现封装的具体步骤如下&#xff…