
欢迎来到海神之光博客之家✅博主简介热爱科研的Matlab仿真开发者修心和技术同步精进个人主页海神之光代码获取方式海神之光Matlab王者学习之路—代码获取方式⛳️座右铭行百里者半于九十。更多Matlab路径规划仿真内容点击①Matlab路径规划进阶版②付费专栏Matlab路径规划初级版⛳️关注CSDN海神之光更多资源等你来⛄一、粒子群算法简介1 引言自然界中的鸟群和鱼群的群体行为一直是科学家的研究兴趣所在。生物学家Craig Reynolds在1987年提出了一个非常有影响的鸟群聚集模型在他的仿真中每一个个体都遵循避免与邻域个体相撞匹配邻域个体的速度飞向鸟群中心且整个群体飞向目标。仿真中仅利用上面三条简单的规则就可以非常接近地模拟出鸟群飞行的现象。1990年 生物学家Frank Heppner也提出了鸟类模型 它的不同之处在于鸟类被吸引飞到栖息地。在仿真中一开始每一只鸟都没有特定的飞行目标只是使用简单的规则确定自己的飞行方向和飞行速度当有一只鸟飞到栖息地时它周围的鸟也会跟着飞向栖息地最终整个鸟群都会落在栖息地。1995年 美国社会心理学家James Kennedy和电气工程师RussellEberhart共同提出了粒子群算法(ParticleS warm Optimization PSO) 该算法的提出是受对鸟类群体行为进行建模与仿真的研究结果的启发。他们的模型和仿真算法主要对Frank Heppner的模型进行了修正以使粒子飞向解空间并在最优解处降落。粒子群算法一经提出由于其算法简单容易实现立刻引起了进化计算领域学者们的广泛关注 形成一个研究热点。2001年出版的J.Kennedy与R.Eberhart合著的《群体智能》将群体智能的影响进一步扩大[] 随后关于粒子群优化算法的研究报告和研究成果大量涌现继而掀起了国内外研究热潮[2-7]。粒子群优化算法来源于鸟类群体活动的规律性进而利用群体智能建立一个简化的模型。它模拟鸟类的觅食行为将求解问题的搜索空间比作鸟类的飞行空间将每只鸟抽象成一个没有质量和体积的粒子用它来表征问题的一个可能解将寻找问题最优解的过程看成鸟类寻找食物的过程进而求解复杂的优化问题。粒子群优化算法与其他进化算法一样也是基于“种群”和“进化”的概念通过个体间的协作与竞争实现复杂空间最优解的搜索。同时它又不像其他进化算法那样对个体进行交叉、变异、选择等进化算子操作而是将群体中的个体看作在l维搜索空间中没有质量和体积的粒子每个粒子以一定的速度在解空间运动 并向自身历史最佳位置P best和邻域历史最佳位置g best聚集 实现对候选解的进化。粒子群算法具有很好的生物社会背景而易于理解由于参数少而容易实现对非线性、多峰问题均具有较强的全局搜索能力在科学研究与工程实践中得到了广泛关注。目前该算法已广泛应用于函数优化、神经网络训练、模式分类、模糊控制等领域。2 粒子群算法理论2.1粒子群算法描述鸟类在捕食过程中鸟群成员可以通过个体之间的信息交流与共享获得其他成员的发现与飞行经历。在食物源零星分布并且不可预测的条件下这种协作机制所带来的优势是决定性的远远大于对食物的竞争所引起的劣势。粒子群算法受鸟类捕食行为的启发并对这种行为进行模仿将优化问题的搜索空间类比于鸟类的飞行空间将每只鸟抽象为一个粒子粒子无质量、无体积用以表征问题的一个可行解优化问题所要搜索到的最优解则等同于鸟类寻找的食物源。粒子群算法为每个粒子制定了与鸟类运动类似的简单行为规则使整个粒子群的运动表现出与鸟类捕食相似的特性从而可以求解复杂的优化问题。粒子群算法的信息共享机制可以解释为一种共生合作的行为即每个粒子都在不停地进行搜索并且其搜索行为在不同程度上受到群体中其他个体的影响[8]同时这些粒子还具备对所经历最佳位置的记忆能力即其搜索行为在受其他个体影响的同时还受到自身经验的引导。基于独特的搜索机制粒子群算法首先生成初始种群即在可行解空间和速度空间随机初始化粒子的速度与位置其中粒子的位置用于表征问题的可行解然后通过种群间粒子个体的合作与竞争来求解优化问题。2.2粒子群算法建模粒子群优化算法源自对鸟群捕食行为的研究一群鸟在区域中随机搜索食物所有鸟知道自己当前位置离食物多远那么搜索的最简单有效的策略就是搜寻目前离食物最近的鸟的周围区域。粒子群算法利用这种模型得到启示并应用于解决优化问题。在粒子群算法中每个优化问题的潜在解都是搜索空间中的一只鸟称之为粒子。所有的粒子都有一个由被优化的函数决定的适应度值每个粒子还有一个速度决定它们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索[9]。粒子群算法首先在给定的解空间中随机初始化粒子群待优化问题的变量数决定了解空间的维数。每个粒子有了初始位置与初始速度然后通过迭代寻优。在每一次迭代中每个粒子通过跟踪两个“极值”来更新自己在解空间中的空间位置与飞行速度一个极值就是单个粒子本身在迭代过程中找到的最优解粒子这个粒子叫作个体极值另一个极值是种群所有粒子在迭代过程中所找到的最优解粒子这个粒子是全局极值。上述的方法叫作全局粒子群算法。如果不用种群所有粒子而只用其中一部分作为该粒子的邻居粒子那么在所有邻居粒子中的极值就是局部极值该方法称为局部粒子群算法。2.3粒子群算法的特点粒子群算法本质是一种随机搜索算法它是一种新兴的智能优化技术。该算法能以较大概率收敛于全局最优解。实践证明它适合在动态、多目标优化环境中寻优与传统优化算法相比具有较快的计算速度和更好的全局搜索能力。(1)粒子群算法是基于群智能理论的优化算法通过群体中粒子间的合作与竞争产生的群体智能指导优化搜索。与其他算法相比粒子群算法是一种高效的并行搜索算法。(2)粒子群算法与遗传算法都是随机初始化种群使用适应值来评价个体的优劣程度和进行一定的随机搜索。但粒子群算法根据自己的速度来决定搜索没有遗传算法的交叉与变异。与进化算法相比粒子群算法保留了基于种群的全局搜索策略但是其采用的速度-位移模型操作简单避免了复杂的遗传操作。(3)由于每个粒子在算法结束时仍保持其个体极值即粒子群算法除了可以找到问题的最优解外还会得到若干较好的次优解因此将粒子群算法用于调度和决策问题可以给出多种有意义的方案。(4)粒子群算法特有的记忆使其可以动态地跟踪当前搜索情况并调整其搜索策略。另外粒子群算法对种群的大小不敏感即使种群数目下降时性能下降也不是很大。3 粒子群算法种类3.1基本粒子群算法3.2标准粒子群算法引入研究粒子群算法经常用到的两个概念一是“探索”指粒子在一定程度上离开原先的搜索轨迹向新的方向进行搜索体现了一种向未知区域开拓的能力类似于全局搜索二是“开发”指粒子在一定程度上继续在原先的搜索轨迹上进行更细一步的搜索主要指对探索过程中所搜索到的区域进行更进一步的搜索。探索是偏离原来的寻优轨迹去寻找一个更好的解探索能力是一个算法的全局搜索能力。开发是利用一个好的解继续原来的寻优轨迹去搜索更好的解它是算法的局部搜索能力。如何确定局部搜索能力和全局搜索能力的比例 对一个问题的求解过程很重要。1998年 Shi Yuhui等人提出了带有惯性权重的改进粒子群算法[10]由于该算法能够保证较好的收敛效果所以被默认为标准粒子群算法。其进化过程为在式(6.7)中第一部分表示粒子先前的速度用于保证算法的全局收敛性能第二部分、第三部分则使算法具有局部收敛能力。可以看出式(6.7)中惯性权重w表示在多大程度上保留原来的速度W较大则全局收敛能力较强局部收敛能力较弱w较小则局部收敛能力较强全局收敛能力较弱。当w1时式(6.7)与式(6.5)完全一样表明带惯性权重的粒子群算法是基本粒子群算法的扩展。实验结果表明w在0.8~1.2之间时粒子群算法有更快的收敛速度而当w1.2时算法则容易陷入局部极值。另外在搜索过程中可以对w进行动态调整在算法开始时可给w赋予较大正值随着搜索的进行可以线性地使w逐渐减小这样可以保证在算法开始时各粒子能够以较大的速度步长在全局范围内探测到较好的区域而在搜索后期较小的w值则保证粒子能够在极值点周围做精细的搜索从而使算法有较大的概率向全局最优解位置收敛。对w进行调整可以权衡全局搜索和局部搜索能力。目前采用较多的动态惯性权重值是Shi提出的线性递减权值策略 其表达式如下3.3压缩因子粒子群算法Clerc等人提出利用约束因子来控制系统行为的最终收敛[11] 该方法可以有效搜索不同的区域并且能得到高质量的解。压缩因子法的速度更新公式为实验结果表明与使用惯性权重的粒子群优化算法相比使用具有约束因子的粒子群算法具有更快的收敛速度。3.4离散粒子群算法基本的粒子群算法是在连续域中搜索函数极值的有力工具。继基本粒子群算法之后 Kennedy和Eberhart又提出了一种离散二进制版的粒子群算法[12]。在此离散粒子群方法中将离散问题空间映射到连续粒子运动空间并适当修改粒子群算法来求解在计算上仍保留经典粒子群算法速度-位置更新运算规则。粒子在状态空间的取值和变化只限于0和1两个值 而速度的每一维vi y代表位置每一位xi取值为1的可能性。因此 在连续粒子群中的vij更新公式依然保持不变 但是P best和best只在[0 1] 内取值。其位置更新等式表示如下4 粒子群算法流程粒子群算法基于“种群”和“进化”的概念通过个体间的协作与竞争实现复杂空间最优解的搜索[13]其流程如下(1)初始化粒子群包括群体规模N每个粒子的位置x和速度Vio(2) 计算每个粒子的适应度值fit[i] 。(3) 对每个粒子 用它的适应度值fit[门和个体极值P best(i)比较。如果fit[i] P best(i) 则用fit[i] 替换掉P best(i) 。(4) 对每个粒子 用它的适应度值fit[i] 和全局极值g best比较。如果fit[i] 8 best 则用fit[i] 替换g best。(5)迭代更新粒子的速度v和位置xj。(6)进行边界条件处理。(7)判断算法终止条件是否满足若是则结束算法并输出优化结果否则返回步骤(2)。粒子群算法的运算流程如图6.1所示。5 关键参数说明在粒子群优化算法中控制参数的选择能够影响算法的性能和效率如何选择合适的控制参数使算法性能最佳是一个复杂的优化问题。在实际的优化问题中通常根据使用者的经验来选取控制参数。粒子群算法的控制参数主要包括粒子种群规模N惯性权重w加速系数c和c 最大速度Via x 停止准则 邻域结构的设定 边界条件处理策略等[14]粒子种群规模N粒子种群大小的选择视具体问题而定但是一般设置粒子数为20~50。对于大部分的问题10个粒子已经可以取得很好的结果不过对于比较难的问题或者特定类型的问题粒子的数量可以取到100或200。另外粒子数目越大算法搜索的空间范围就越大也就更容易发现全局最优解当然算法运行的时间也越长。惯性权重w惯性权重w是标准粒子群算法中非常重要的控制参数可以用来控制算法的开发和探索能力。惯性权重的大小表示了对粒子当前速度继承的多少。当惯性权重值较大时全局寻优能力较强局部寻优能力较弱当惯性权重值较小时全局寻优能力较弱局部寻优能力较强。惯性权重的选择通常有固定权重和时变权重。固定权重就是选择常数作为惯性权重值在进化过程中其值保持不变一般取值为[0.81.2]时变权重则是设定某一变化区间在进化过程中按照某种方式逐步减小惯性权重。时变权重的选择包括变化范围和递减率。固定的惯性权重可以使粒子保持相同的探索和开发能力而时变权重可以使粒子在进化的不同阶段拥有不同的探索和开发能力。加速常数c1和c2加速常数c和c 2分别调节向P best和g best方向飞行的最大步长 它们分别决定粒子个体经验和群体经验对粒子运行轨迹的影响反映粒子群之间的信息交流。如果crc20则粒子将以当前的飞行速度飞到边界。此时粒子仅能搜索有限的区域所以难以找到最优解。如果q0则为“社会”模型粒子缺乏认知能力而只有群体经验它的收敛速度较快但容易陷入局部最优如果oy0则为“认知”模型没有社会的共享信息个体之间没有信息的交互所以找到最优解的概率较小一个规模为D的群体等价于运行了N个各行其是的粒子。因此一般设置c1C2通常可以取c1cg1.5。这样个体经验和群体经验就有了同样重要的影响力使得最后的最优解更精确。粒子的最大速度vmax粒子的速度在空间中的每一维上都有一个最大速度限制值vd max用来对粒子的速度进行钳制 使速度控制在范围[-Vimax va max] 内这决定问题空间搜索的力度 该值一般由用户自己设定。Vmax是一个非常重要的参数如果该值太大则粒子们也许会飞过优秀区域而如果该值太小则粒子们可能无法对局部最优区域以外的区域进行充分的探测。它们可能会陷入局部最优而无法移动足够远的距离而跳出局部最优 达到空间中更佳的位置。研究者指出 设定Vmax和调整惯性权重的作用是等效的 所以!max一般用于对种群的初始化进行设定 即将vmax设定为每维变量的变化范围 而不再对最大速度进行细致的选择和调节。停止准则最大迭代次数、计算精度或最优解的最大停滞步数▲t(或可以接受的满意解)通常认为是停止准则即算法的终止条件。根据具体的优化问题停止准则的设定需同时兼顾算法的求解时间、优化质量和搜索效率等多方面性能。邻域结构的设定全局版本的粒子群算法将整个群体作为粒子的邻域具有收敛速度快的优点但有时算法会陷入局部最优。局部版本的粒子群算法将位置相近的个体作为粒子的邻域收敛速度较慢不易陷入局部最优值。实际应用中可先采用全局粒子群算法寻找最优解的方向即得到大致的结果然后采用局部粒子群算法在最优点附近进行精细搜索。边界条件处理当某一维或若干维的位置或速度超过设定值时采用边界条件处理策略可将粒子的位置限制在可行搜索空间内这样能避免种群的膨胀与发散也能避免粒子大范围地盲目搜索从而提高了搜索效率。具体的方法有很多种 比如通过设置最大位置限制Xmax和最大速度限制Vmax 当超过最大位置或最大速度时 在范围内随机产生一个数值代替或者将其设置为最大值即边界吸收。⛄二、蚁群算法简介1 引言在自然界中各种生物群体显现出来的智能近几十年来得到了学者们的广泛关注学者们通过对简单生物体的群体行为进行模拟进而提出了群智能算法。其中 模拟蚁群觅食过程的蚁群优化算法(AntColony Optimization A CO) 和模拟鸟群运动方式的粒子群算法(ParticleS warm OptimizationPSO) 是两种最主要的群智能算法。蚁群算法是一种源于大自然生物世界的新的仿生进化算法由意大利学者M.Dorigo V.Mani ezzo和A.Color ni等人于20世纪90年代初期通过模拟自然界中蚂蚁集体寻径行为而提出的一种基于种群的启发式随机搜索算法[1].蚂蚁有能力在没有任何提示的情形下找到从巢穴到食物源的最短路径并且能随环境的变化适应性地搜索新的路径产生新的选择。其根本原因是蚂蚁在寻找食物时能在其走过的路径上释放一种特殊的分泌物――信息素2随着时间的推移该物质会逐渐挥发后来的蚂蚁选择该路径的概率与当时这条路径上信息素的强度成正比。当一条路径上通过的蚂蚁越来越时其留下的信息素也越来越多后来蚂蚁选择该路径的概率也就越高从而更增加了该路径上的信息素强度。而强度大的信息素会吸引更多的蚂蚁从而形成一种正反馈机制。通过这种正反馈机制蚂蚁最终可以发现最短路径。最早的蚁群算法是蚂蚁系统(Ant System AS) 研究者们根据不同的改进策略对蚂蚁系统进行改进并开发了不同版本的蚁群算法并成功地应用于优化领域。用该方法求解旅行商(TSP) 问题、分配问题、车间作业调度(job-shop) 问题 取得了较好的试验结果[3-6] 。蚁群算法具有分布式计算、无中心控制和分布式个体之间间接通信等特征易于与其他优化算法相结合它通过简单个体之间的协作表现出了求解复杂问题的能力已被广泛应用于求解优化问题。蚁群算法相对而言易于实现且算法中并不涉及复杂的数学操作其处理过程对计算机的软硬件要求也不高因此对它的研究在理论和实践中都具有重要的意义。目前国内外的许多研究者和研究机构都开展了对蚁群算法理论和应用的研究蚁群算法已成为国际计算智能领域关注的热点课题。虽然目前蚁群算法没有形成严格的理论基础但其作为一种新兴的进化算法已在智能优化等领域表现出了强大的生命力。2 蚁群算法理论蚁群算法是对自然界蚂蚁的寻径方式进行模拟而得出的一种仿生算法。蚂蚁在运动过程中能够在它所经过的路径上留下信息素进行信息传递而且蚂蚁在运动过程中能够感知这种物质并以此来指导自己的运动方向。因此由大量蚂蚁组成的蚁群的集体行为便表现出一种信息正反馈现象某一路径上走过的蚂蚁越多则后来者选择该路径的概率就越大[7]。2.1真实蚁群的觅食过程为了说明蚁群算法的原理先简要介绍一下蚂蚁搜寻食物的具体过程。在自然界中蚁群在寻找食物时它们总能找到一条从食物到巢穴之间的最优路径。这是因为蚂蚁在寻找路径时会在路径上释放出一种特殊的信息素。蚁群算法的信息交互主要是通过信息素来完成的。蚂蚁在运动过程中能够感知这种物质的存在和强度。初始阶段环境中没有信息素的遗留蚂蚁寻找事物完全是随机选择路径随后寻找该事物源的过程中就会受到先前蚂蚁所残留的信息素的影响其表现为蚂蚁在选择路径时趋向于选择信息素浓度高的路径。同时信息素是一种挥发性化学物会随着时间的推移而慢慢地消逝。如果每只蚂蚁在单位距离留下的信息素相同那对于较短路径上残留的信息素浓度就相对较高这被后来的蚂蚁选择的概率就大从而导致这条短路径上走的蚂蚁就越多。而经过的蚂蚁越多该路径上残留的信息素就将更多这样使得整个蚂蚁的集体行为构成了信息素的正反馈过程最终整个蚁群会找出最优路径。若蚂蚁从A点出发速度相同食物在D点则它可能随机选择路线ABD或A CD。假设初始时每条路线分配一只蚂蚁 每个时间单位行走一步。图5.1所示为经过8个时间单位时的情形走路线ABD的蚂蚁到达终点而走路线A CD的蚂蚁刚好走到C点 为一半路程。图5.2表示从开始算起 经过16个时间单位时的情形走路线ABD的蚂蚁到达终点后得到食物又返回了起点A而走路线A CD的蚂蚁刚好走到D点.图5.2蚂蚁出发后经过16个时间单位时的情形假设蚂蚁每经过一处所留下的信息素为1个单位则经过32个时间单位后所有开始一起出发的蚂蚁都经过不同路径从D点取得了食物。此时ABD的路线往返了2趟 每一处的信息素为4个单位 而A CD的路线往返了一趟每一处的信息素为2个单位其比值为21。寻找食物的过程继续进行 则按信息素的指导 蚁群在ABD路线上增派一只蚂蚁(共2只) 而A CD路线上仍然为一只蚂蚁。再经过32个时间单位后两条线路上的信息素单位积累为12和4比值为31。若按以上规则继续 蚁群在ABD路线上再增派一只蚂蚁(共3只) 而A CD路线上仍然为一只蚂蚁。再经过32个时间单位后 两条线路上的信息素单位积累为24和6比值为41.若继续进行 则按信息素的指导 最终所有的蚂蚁都会放弃A CD路线 而选择ABD路线。这也就是前面所提到的正反馈效应。2.2人工蚁群的优化过程基于以上真实蚁群寻找食物时的最优路径选择问题可以构造人工蚁群 来解决最优化问题 如TSP问题。人工蚁群中把具有简单功能的工作单元看作蚂蚁。二者的相似之处在于都是优先选择信息素浓度大的路径。较短路径的信息素浓度高所以能够最终被所有蚂蚁选择也就是最终的优化结果。两者的区别在于人工蚁群有一定的记忆能力能够记忆已经访问过的节点。同时人工蚁群再选择下一条路径的时候是按一定算法规律有意识地寻找最短路径而不是盲目的。例如在TSP问题中 可以预先知道当前城市到下一个目的地的距离。在TSP问题的人工蚁群算法中 假设m只蚂蚁在图的相邻节点间移动从而协作异步地得到问题的解。每只蚂蚁的一步转移概率由图中的每条边上的两类参数决定一是信息素值也称信息素痕迹二是可见度即先验值。信息素的更新方式有两种一是挥发也就是所有路径上的信息素以一定的比率减少模拟自然蚁群的信息素随时间挥发的过程二是增强给评价值“好”(有蚂蚁走过)的边增加信息素。蚂蚁向下一个目标的运动是通过一个随机原则来实现的也就是运用当前所在节点存储的信息计算出下一步可达节点的概率并按此概率实现一步移动如此往复越来越接近最优解。蚂蚁在寻找过程中或在找到一个解后会评估该解或解的一部分的优化程度并把评价信息保存在相关连接的信息素中。2.3真实蚂蚁与人工蚂蚁的异同蚁群算法是一种基于群体的、用于求解复杂优化问题的通用搜索技术。与真实蚂蚁通过外信息的留存、跟随行为进行间接通信相似蚁群算法中一群简单的人工蚂蚁通过信息素进行间接通信并利用该信息和与问题相关的启发式信息逐步构造问题的解。人工蚂蚁具有双重特性一方面它们是真实蚂蚁的抽象具有真实蚂蚁的特性另一方面它们还有一些真实蚂蚁没有的特性这些新的特性使人工蚂蚁在解决实际优化问题时具有更好地搜索较优解的能力。人工蚂蚁与真实蚂蚁的相同点为(1)都是一群相互协作的个体。与真实蚁群一样蚁群算法由一群人工蚂蚁组成人工蚂蚁之间通过同步/异步协作来寻找问题的最优解。虽然单只人工蚂蚁可以构造出问题的解但只有当多只人工蚂蚁通过相互协作才能发现问题的最优(次优)解。人工蚂蚁个体间通过写/读问题的状态变量来进行协作。(2)都使用信息素的迹和蒸发机制。如真实蚂蚁一样人工蚂蚁通过改变所访问过的问题的数字状态信息来进行间接的协作。在蚁群算法中信息素是人工蚂蚁之间进行交流的唯一途径。这种通信方式在群体知识的利用上起到了至关重要的作用。另外蚁群算法还用到了蒸发机制这一点对应于真实蚂蚁中信息素的蒸发现象。蒸发机制使蚁群逐渐忘记过去的历史使后来的蚂蚁在搜索中较少受到过去较差解的影响从而更好地指导蚂蚁的搜索方向。(3)搜索最短路径与局部移动。人工蚂蚁和真实蚂蚁具有相同的任务即以局部移动的方式构造出从原点(蚁巢)到目的点(食物源)之间的最短路径。(4)随机状态转移策略。人工蚂蚁和真实蚂蚁都按照概率决策规则从一种状态转移到另一种相邻状态。其中的概率决策规则是与问题相关的信息和局部环境信息的函数。在状态转移过程中人工蚂蚁和真实蚂蚁都只用到了局部信息没有使用前瞻策略来预见将来的状态。人工蚂蚁和真实蚂蚁的不同点为(1)人工蚂蚁生活在离散的时间从一种离散状态到另一种离散状态。(2)人工蚂蚁具有内部状态即人工蚂蚁具有一定的记忆能力能记住自己走过的地方。(3)人工蚂蚁释放信息素的数量是其生成解的质量的函数。(4)人工蚂蚁更新信息素的时机依赖于特定的问题。例如大多数人工蚂蚁仅仅在蚂蚁找到一个解之后才更新路径上的信息素。2.4蚁群算法的特点蚁群算法是通过对生物特征的模拟得到的一种优化算法它本身具有很多优点(1)蚁群算法是一种本质上的并行算法。每只蚂蚁搜索的过程彼此独立仅通过信息激素进行通信。所以蚁群算法可以看作一个分布式的多智能体系统它在问题空间的多点同时开始独立的解搜索不仅增加了算法的可靠性也使得算法具有较强的全局搜索能力。(2)蚁群算法是一种自组织的算法。所谓自组织就是组织力或组织指令来自于系统的内部以区别于其他组织。如果系统在获得空间、时间或者功能结构的过程中没有外界的特定干预就可以说系统是自组织的。简单地说自组织就是系统从无序到有序的变化过程。(3)蚁群算法具有较强的鲁棒性。相对于其他算法蚁群算法对初始路线的要求不高即蚁群算法的求解结果不依赖于初始路线的选择而且在搜索过程中不需要进行人工的调整。此外蚁群算法的参数较少设置简单因而该算法易于应用到组合优化问题的求解。(4)蚁群算法是一种正反馈算法。从真实蚂蚁的觅食过程中不难看出蚂蚁能够最终找到最优路径直接依赖于其在路径上信息素的堆积而信息素的堆积是一个正反馈的过程。正反馈是蚁群算法的重要特征它使得算法进化过程得以进行。3 基本蚁群算法及其流程4 改进的蚁群算法针对基本蚁群算法一般需要较长的搜索时间和容易出现停滞现象等不足很多学者在此基础上提出改进算法提高了算法的性能和效率。4.1精英蚂蚁系统4.2 最大最小蚂蚁系统为了克服基本蚁群系统中可能出现的停滞现象 Thomas Stutz le等人提出了最大-最小(MAX-MIN) 蚁群系统[10] 主要有三方面的不同(1)与蚁群系统相似为了充分利用循环最优解和目前为止找出的最优解在每次循环之后只有一只蚂蚁进行信息素更新。这只蚂蚁可能是找出当前循环中最优解的蚂蚁(迭代最优的蚂蚁)也可能是找出从实验开始以来最优解的蚂蚁(全局最优的蚂蚁)而在蚂蚁系统中对所有蚂蚁走过的路径都进行信息素更新。(2) 为避免搜索的停滞 在每个解元素(TSP中是每条边) 上的信息素轨迹量的值域范围被限制在[minTmax] 区间内 而在蚂蚁系统中信息素轨迹量不被限制使得一些路径上的轨迹量远高于其他边从而蚂蚁都沿着同条路径移动阻止了进一步搜索更优解的行为。(3)为使蚂蚁在算法的初始阶段能够更多地搜索新的解决方案将信息素初始化为tmax而在蚂蚁系统中没有这样的设置。4.3基于排序的蚁群算法基于排序的蚁群算法(Rank-BasedAntSystem)是Bull n heimer、Hartl和Strauss等人提出的[11] 。在该算法中 每个蚂蚁释放的信息素按照它们不同的等级进行挥发另外类似于精英蚁群算法精英蚂蚁在每次循环中释放更多的信息素。在修改信息素路径前蚂蚁按照它们的旅行长度进行排名(短的靠前)蚂蚁释放信息素的量要和蚂蚁的排名相乘。在每次循环中只有排名前w-1位的蚂蚁和精英蚂蚁才允许在路径上释放信息素。己知的最优路径给以最强的反馈和系数w相乘而排名第r位的蚂蚁则乘以系数“w-(≥0)。信息素如下式所示4.4自适应蚁群算法基本蚁群系统让信息量最大的路径对每次路径的选择和信息量的更新起主要作用但由于强化了最优信息反馈就可能导致“早熟”停滞现象。而最大最小蚁群算法将各个路径上的信息量的更新限定在固定的范围内这虽然在一定程度上避免了“早熟”停滞现象但在解分布较分散时会导致收敛速度变慢。以上方法的共同缺点在于它们都按一种固定不变的模式去更新信息量和确定每次路径的选择概率。为了克服以上算法的不足 L.M.Gambardella和M.Dorigo提出了基于调节信息素挥发度的自适应蚁群算法[12]。相对基本蚁群算法的改进如下(1)在每次循环结束后求出最优解并将其保留。(2)自适应地改变p值。当问题规模比较大时由于信息量的挥发系数p的存在使那些从未被搜索到的信息量会减小到接近于0降低了算法的全局搜索能力当p过大且解的信息量增大时以前搜索过的解被选择的可能性过大也会影响到算法的全局搜索能力通过减小p虽然可以提高算法的全局搜索能力但又会使算法的收敛速度降低。因此可以自适应地改变p的值。p的初始值p(to)1当算法求得的最优值在N次循环内没有明显改进时p减为5 关键参数说明在蚁群算法中不仅信息素和启发函数乘积以及蚂蚁之间的合作行为会严重影响到算法的收敛性蚁群算法的参数也是影响其求解性能和效率的关键因素。信息素启发式因子α、期望启发因子β、信息素蒸发系数p、信息素强度Q、蚂蚁数目m等都是非常重要的参数其选取方法和选取原则直接影响到蚁群算法的全局收敛性和求解效率。信息素启发式因子a信息素启发式因子a代表信息量对是否选择当前路径的影响程度即反映蚂蚁在运动过程中所积累的信息量在指导蚁群搜索中的相对重要程度。a的大小反映了蚁群在路径搜索中随机性因素作用的强度其值越大蚂蚁在选择以前走过的路径的可能性就越大搜索的随机性就会减弱而当启发式因子a的值过小时则易使蚁群的搜索过早陷于局部最优。根据经验信息素启发式因子a取值范围一般为[14]时蚁群算法的综合求解性能较好。期望启发因子β期望启发因子β表示在搜索时路径上的信息素在指导蚂蚁选择路径时的向导性它的大小反映了蚁群在搜索最优路径的过程中的先验性和确定性因素的作用强度。期望启发因子β的值越大蚂蚁在某个局部点上选择局部最短路径的可能性就越大虽然这个时候算法的收敛速度得以加快但蚁群搜索最优路径的随机性减弱而此时搜索易于陷入局部最优解。根据经验期望启发因子β取值范围一般为[35]此时蚁群算法的综合求解性能较好。实际上信息素启发式因子α和期望启发因子β是一对关联性很强的参数蚁群算法的全局寻优性能首先要求蚁群的搜索过程必须要有很强的随机性而蚁群算法的快速收敛性能又要求蚁群的搜索过程必须要有较高的确定性。因此两者对蚁群算法性能的影响和作用是相互配合、密切相关的算法要获得最优解就必须在这二者之间选取一个平衡点只有正确选定它们之间的搭配关系才能避免在搜索过程中出现过早停滞或陷入局部最优等情况的发生。信息素蒸发系数p蚁群算法中的人工蚂蚁是具有记忆功能的随着时间的推移以前留下的信息素将会逐渐消逝蚁群算法与其他各种仿生进化算法一样也存在着收敛速度慢、容易陷入局部最优解等缺陷而信息素蒸发系数p大小的选择将直接影响到整个蚁群算法的收敛速度和全局搜索性能。在蚁群算法的抽象模型中p表示信息素蒸发系数1-p则表示信息素持久性系数。因此p的取值范围应该是0~1之间的一个数表示信息素的蒸发程度它实际上反映了蚂蚁群体中个体之间相互影响的强弱。p过小时则表示以前搜索过的路径被再次选择的可能性过大会影响到算法的随机性能和全局搜索能力p过大时说明路径上的信息素挥发的相对变多虽然可以提高算法的随机搜索性能和全局搜索能力但过多无用搜索操作势必会降低算法的收敛速度。蚂蚁数目m蚁群算法是一种随机搜索算法与其他模拟进化算法一样通过多个候选解组成的群体进化过程来寻求最优解在该过程中不仅需要每个个体的自适应能力更需要群体之间的相互协作能力。蚁群在搜索过程中之所以表现出复杂有序的行为是因为个体之间的信息交流与相互协作起着至关重要的作用。对于旅行商问题单个蚂蚁在一次循环中所经过的路径表现为问题可行解集中的一个解m只蚂蚁在一次循环中所经过的路径则表现为问题解集中的一个子集。显然子集增大(即蚂蚁数量增多)可以提高蚁群算法的全局搜索能力以及算法的稳定性但蚂蚁数目增大后会使大量的曾被搜索过的解(路径)上的信息素的变化趋于平均信息正反馈的作用不明显虽然搜索的随机性得到了加强但收敛速度减慢反之子集较小(蚂蚁数量少)特别是当要处理的问题规模比较大时会使那些从来未被搜索到的解(路径)上的信息素减小到接近于0搜索的随机性减弱虽然收敛速度加快了但会使算法的全局性能降低算法的稳定性差容易出现过早停滞现象。m一般取10~50.信息素强度Q对算法性能的影响在蚁群算法中各个参数的作用实际上是紧密联系的其中对算法性能起着主要作用的是信息启发式因子α、期望启发式因子β和信息素挥发因子p这三个参数总信息量(对算法性能的影响有赖于上述三个参数的选取 以及算法模型的选取。例如 在ant-cycle模型和ant-quantity模型中 总信息量4所起的作用显然是有很大差异的 即随着问题规模的不同其影响程度也将不同。相关人员研究结果表明总信息量Q对ant-cycle模型蚁群算法的性能没有明显的影响。因此在算法参数的选择上参数Q不必作特别的考虑可以任意选取。最大进化代数G最大进化代数6是表示蚁群算法运行结束条件的一个参数表示蚁群算法运行到指定的进化代数之后就停止运行并将当前群体中的最佳个体作为所求问题的最优解输出。一般6取100~500。⛄三、部分源代码clcclearclose allE0.000001;maxnum30;%最大迭代次数narvs3;%目标函数的自变量个数particlesize20;%粒子群规模c11.2;%每个粒子的个体学习因子加速度常数c21.6;%每个粒子的社会学习因子加速度常数w0.8;%惯性因子vmax10.5;%粒子的最大飞翔速度vamx2-0.5;vrand(particlesize,narvs);%粒子飞翔速度xzeros(particlesize,3);x(:,1)1rand(1);x(:,2)7rand(1);%粒子所在位置x(:,3)0.20.1*rand(1);%定义适应度函数% ROUTzeros(particlesize,100);for i1:particlesize[TT(i),ROUT{i},f(i)]ACO(x(i,1),x(i,2),x(i,3));endpersonalbest_xx;personalbest_favalf;% personalbest_favalTT;[globalbest_faval(1),i]min(personalbest_faval);globalbest_xpersonalbest_x(i,:);globalbest_routeROUT{i};ff(1)globalbest_faval(1);k2;wrouteglobalbest_route;[minkl,p]min(globalbest_faval);xbestglobalbest_x(p,:);LENROUTlength(route);disp([‘Alpha 表征信息素重要程度的参数’,num2str(xbest(1))]);disp([‘Beta 表征启发式因子重要程度的参数’,num2str(xbest(2))]);disp([‘Rho 信息素蒸发系数’,num2str(xbest(3))]);disp(sprintf(‘Shortroad is: %s’,num2str(route)));disp(sprintf(‘Mininum is: %d’,minkl));figure(2)% set(gcf,‘color’,‘white’);plot(1:length(ff),ff)title(‘粒子群蚁群算法收敛曲线变化趋势’)xlabel(‘迭代次数’);ylabel(‘适应度值’);first_address [100,10150,10170,30180,20200,10200,100200,150190,180180,200160,200170,180140,180135,200130,180100,200125,100200,30010,30010,20010,18010,10010,1050,30100,10];%first_address表示测试数据中的节点坐标SumOfCity size(first_address,1);%节点个数实际返回行数即为节点个数length_address 0.*ones(SumOfCity,SumOfCity);%length_address表示两两节点间的距离初始设定10000可以设定无穷大表示不相连%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%length_address(1,2)194.0;%表示节点1和节点2的COST值length_address(2,3)64.9;%length_address(3,4)20.0;%length_address(4,5)18.6;length_address(2,5)72.4;length_address(5,6)123.4;length_address(6,7)35.5;length_address(7,8)32.4;length_address(8,9)45.0;length_address(9,10)51.4;length_address(10,13)271.2;length_address(13,15)100.0;length_address(15,19)189.5;length_address(8,11)293.9;length_address(11,12)100.0;length_address(12,14)4.1;length_address(14,20)192.9;length_address(14,15)86.8;length_address(10,12)87.0;length_address(6,16)600.0;length_address(16,21)279.3;length_address(7,17)92.0;length_address(17,18)464.9;length_address(18,19)46.0;length_address(19,20)44.6;length_address(20,21)67.5;length_address(21,22)230.3;length_address(22,23)102.9;length_address(23,24)126.9;length_address(22,24)262.5;for n1:size(first_address)for m1:size(first_address)if length_address(n,m)~0length_address(m,n)length_address(n,m); %对称矩阵endendendMMsize(length_address,1);% 画出节点分布图形figure;grid on;hold on;title (strcat(‘井下机车最短运输路径’,date))%title( sprintf(‘井下机车最短运输路径 Event occured at %s’,datestr (date ,15)));for i1:MM-1plot(first_address(i,1),first_address(i,2),‘bo’,‘MarkerSize’,10);strnum2str(i);text(first_address(i,1)-5,first_address(i,2)5,str,‘Color’,‘red’,‘FontSize’,12);end% mlength(route);for i1:LENROUTplot(first_address(route(i),1),first_address(route(i),2),‘MarkerSize’,10,‘MarkerEdgeColor’,‘k’,‘MarkerFaceColor’,[0.5,0.5,0.5]) ;hold on;endfor i1:MMfor j1:MMif(length_address(i,j)~0)line([first_address(i,1),first_address(j,1)],[first_address(i,2),first_address(j,2)],‘Color’,‘g’,‘LineWidth’,3);%划线text((first_address(i,1)first_address(j,1))/2,(first_address(i,2)first_address(j,2))/2,num2str(length_address(i,j)));%标注线段距离endendend%% 最短路径for p1:LENROUT-1if(route(p1)~24)line([first_address(route§,1),first_address(route(p1),1)],[first_address(route§,2),first_address(route(p1),2)],‘Color’,‘r’,‘LineWidth’,3);%划线text((first_address(route§,1)first_address(route(p1),1))/2,(first_address(route§,2)first_address(route(p1),2))/2,num2str(length_address(route§,route(p1))));%标注线段距离elseline([first_address(route§,1),first_address(1,1)],[first_address(route§,2),first_address(1,2)],‘Color’,‘r’,‘LineWidth’,3);%划线text((first_address(route§,1)first_address(1,1))/2,(first_address(route§,2)first_address(1,2))/2,num2str(length_address(route§,route(p1))));%标注线段距离endendaxis([0 250 0 400])% 图形显示最优及平均函数值变化趋势% figure(2);% plot( minPL);% title(‘迭代优化过程’);% xlabel(‘迭代次数’);% ylabel(‘Cost’);% hold on;⛄四、运行结果⛄五、matlab版本及参考文献1 matlab版本2014a2 参考文献[1]胡纯德,祝延军,高随祥.基于人工免疫算法和蚁群算法求解旅行商问题[J].计算机工程与应用. 2004,(34)3 备注简介此部分摘自互联网仅供参考若侵权联系删除 仿真咨询1 各类智能优化算法改进及应用生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化2 机器学习和深度学习方面卷积神经网络CNN、LSTM、支持向量机SVM、最小二乘支持向量机LSSVM、极限学习机ELM、核极限学习机KELM、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断3 图像处理方面图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知4 路径规划方面旅行商问题TSP、车辆路径问题VRP、MVRP、CVRP、VRPTW等、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化5 无人机应用方面无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配6 无线传感器定位及布局方面传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化7 信号处理方面信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化8 电力系统方面微电网优化、无功优化、配电网重构、储能配置9 元胞自动机方面交通流 人群疏散 病毒扩散 晶体生长10 雷达方面卡尔曼滤波跟踪、航迹关联、航迹融合