✅作者简介热爱科研的Matlab仿真开发者修心和技术同步精进matlab项目合作可私信。个人主页Matlab科研工作室个人信条格物致知。更多Matlab仿真内容点击⛄ 内容介绍旅行商问题的传统求解方法是遗 传算法,此算法收敛速度慢,并不能获得问题的最优解.为了求取旅行商问题的最优解,本文在阐述蚁群算法的基本原理,模型以及在旅行商问题中的实现过程的基 础上,提出了一种以蚁群算法构建的基于MATLAB的求解旅行商问题的方法,并最后通过仿真实验获得了目前已知的最好解.1.1 蚁群算法原理蚁群算法是受到对真实蚂蚁群觅食行为研究的启发而提出。生物学研究表明一群相互协作的蚂蚁能够找到食物和巢穴之间的最短路径,而单只蚂蚁则不能。生物学家经过大量细致观察研究发现,蚂蚁个体之间的行为是相互作用相互影响的。蚂蚁在运动过程中,能够在它所经过的路径上留下一种称之为信息素的物质,而此物质恰恰是蚂蚁个体之间信息传递交流的载体。蚂蚁在运动时能够感知这种物质,并且习惯于追踪此物质爬行,当然爬行过程中还会释放信息素。一条路上的信息素踪迹越浓,其它蚂蚁将以越高的概率跟随爬行此路径,从而该路径上的信息素踪迹会被加强,因此,由大量蚂蚁组成的蚁群的集体行为便表现出一种信息正反馈现象。某一路径上走过的蚂蚁越多,则后来者选择该路径的可能性就越大。蚂蚁个体之间就是通过这种间接的通信机制实现协同搜索最短路径的目标的。我们举例简单说明蚂蚁觅食行为如上图a,b,c的示意图a图是原始状态蚂蚁起始点为A要到达E中途有障碍物要绕过才能到达。BC和BH是绕过障碍物的2条路径(假设只有2条)。各个路径的距离d已经标定。b图是t0时刻蚂蚁状态各个边上有相等的信息素浓度假设为15c图是t1时刻蚂蚁经过后的状态各个边的信息素浓度有变化因为大量蚂蚁的选择概率会不一样而选择概率是和路径长度相关的。所以越短路径的浓度会越来越大经过此短路径达到目的地的蚂蚁也会比其他路径多。这样大量的蚂蚁实践之后就找到了最短路径。所以这个过程本质可以概括为以下几点1.路径概率选择机制信息素踪迹越浓的路径,被选中的概率越大2.信息素更新机制路径越短,路径上的信息素踪迹增长得越快3.协同工作机制蚂蚁个体通过信息素进行信息交流。从蚂蚁觅食的原理可见,单个个体的行为非常简单蚂蚁只知道跟踪信息素爬行并释放信息素,但组合后的群体智能又非常高蚂蚁群能在复杂的地理分布的清况下,轻松找到蚁穴与食物源之间的最短路径。这种特点恰恰与元启发算法的特点相一致,蚁群优化算法正是受到这种生态学现象的启发后加以模仿并改进而来,觅食的蚂蚁由人工蚁替代,蚂蚁释放的信息素变成了人工信息素,蚂蚁爬行和信息素的蒸发不再是连续不断的,而是在离散的时空中进行。从深层意义上来讲,蚁群算法作为优化的方法之一,属于人工群集智能领域。人工群集智能,大都受自然群集智能如昆虫群和动物群等的启发而来。除了具有独特的强有力的合作搜索能力外,还可以利用一系列的计算代理对问题进行分布式处理,从而大大提高搜索效率。1.2 蚁群算法的基本流程我们还是采用大连理工大学谷俊峰的PPT来说明问题重要公式进行截图计算和解释对PPT难以理解的地方进行单独解释1.2.1 基本数学模型首先看看基本TSP问题的基本数学模型问题其实很简单目标函数就是各个走过路径的总长度注意的就是距离矩阵根据实际的问题不一样长度是不一样的。1.2.2 蚁群算法说明在说明群蚁算法流程之前我们对算法原理和几个注意点进行描述1.TSP问题的人工蚁群算法中假设m只蚂蚁在图的相邻节点间移动从而协作异步地得到问题的解。每只蚂蚁的一步转移概率由图中的每条边上的两类参数决定1. 信息素值也称信息素痕迹。2.可见度即先验值。2.信息素的更新方式有2种一是挥发也就是所有路径上的信息素以一定的比率进行减少模拟自然蚁群的信息素随时间挥发的过程二是增强给评价值“好”(有蚂蚁走过)的边增加信息素。3.蚂蚁向下一个目标的运动是通过一个随机原则来实现的也就是运用当前所在节点存储的信息计算出下一步可达节点的概率并按此概率实现一步移动逐此往复越来越接近最优解。4.蚂蚁在寻找过程中或者找到一个解后会评估该解或解的一部分的优化程度并把评价信息保存在相关连接的信息素中。1.2.3 蚁群算法核心步骤更加我们前面的原理和上述说明群蚁算法的2个核心步骤是 路径构建 和 信息素更新。我们将重点对这2个步骤进行说明。1 路径构建每个蚂蚁都随机选择一个城市作为其出发城市并维护一个路径记忆向量用来存放该蚂蚁依次经过的城市。蚂蚁在构建路径的每一步中按照一个随机比例规则选 择下一个要到达的城市。随机概率是按照下列公式来进行计算的上述公式就是计算 当前点 到 每一个可能的下一个节点 的概率。分子是 信息素强度 和 能见度 的幂乘积而分母则是所有 分子的和值。这个刚开始是很不容易理解的我们在最后实例计算的时候可以看得很清楚再反过来理解公式。注意每次选择好节点后就要从可用节点中移除选择的节点。2 信息素更新信息素更新是群蚁算法的核心。也是整个算法的核心所在。算法在初始期间有一个固定的浓度值在每一次迭代完成之后所有出去的蚂蚁回来后会对所走过的路线进行计算然后更新相应的边的信息素浓度。很明显这个数值肯定是和蚂蚁所走的长度有关系的经过一次次的迭代 近距离的线路的浓度会很高从而得到近似最优解。那我们看看信息素更新的过程。初始化信息素浓度C(0)如果太小算法容易早熟蚂蚁会很快集中到一条局部最优路径上来因为可以想想太小C值使得和每次挥发和增强的值都差不多那么 随机情况下一些小概率的事件发生就会增加非最优路径的信息素浓度如果C太大信息素对搜索方向的指导性作用减低影响算法性能。一般情况下我们可以使用贪婪算法获取一个路径值Cnn然后根据蚂蚁个数来计算C(0) m/Cnn ,m为蚂蚁个数每一轮过后问题空间中的所有路径上的信息素都会发生蒸发,然后所有的蚂蚁根据自己构建的路径长度在它们本轮经过的边上释放信息素公式如下信息素更新的作用1.信息素挥发(evaporation)信息素痕迹的挥发过程是每个连接上的 信息素痕迹的浓度自动逐渐减弱的过程这个挥发过程主要用于避 免算法过快地向局部最优区域集中有助于搜索区域的扩展。2.信息素增强(reinforcement)增强过程是蚁群优化算法中可选的部 分称为离线更新方式还有在线更新方式。这种方式可以实现 由单个蚂蚁无法实现的集中行动。基本蚁群算法的离线更新方式是 在蚁群中的m只蚂蚁全部完成n城市的访问后统一对残留信息进行 更新处理。3 迭代与停止迭代停止的条件可以选择合适的迭代次数后停止输出最优路径也可以看是否满足指定最优条件找到满足的解后停止。最重要的是我刚开始理解这个算法的时候以为每一只蚂蚁走一条边就是一次迭代其实是错的。这里算法每一次迭代的意义是每次迭代的m只蚂蚁都完成了自己的路径过程回到原点后的整个过程。回到目录4 蚁群算法计算实例使用PPT中的一个案例非常直观对几个符号错误进行了修改主要是计算概率的乘号结果没有错误过程总体还是比较简单的注意理解公式然后把公式和实例结合起来看最好是拿笔自己手动画一画容易理解。⛄ 部分代码function jSelect_for_aca(R0,Ak,i,Allow,A,B,Pheromone,Heuristic);AllowCityfind(Allow(Ak,:)0);AllowCityAllow(Ak,AllowCity);Bpij(Pheromone(i,AllowCity).^A).*(Heuristic(i,AllowCity).^B);[Bjv Bj]max(Bpij);Rrand;if(R0R)jAllowCity(Bj);elseGpijsum(Bpij);PijBpij./Gpij;Pijcumsum(Pij);Rdrand;% 赌轮选择[Anx Any]size(AllowCity);for FitIn1:Anyif RdPij(FitIn)jAllowCity(FitIn);break;endendend⛄ 运行结果⛄ 参考文献[1]屈国强周永良. 蚁群优化结合变邻域搜索求解NWFS调度问题[J]. 计算机工程与应用, 2012, 048(016):216-219,248.❤️ 关注我领取海量matlab电子书和数学建模资料❤️部分理论引用网络文献若有侵权联系博主删除