【MATLAB源码-第388期】基于matlab的蚯蚓优化算法(EWA)机器人栅格路径规划,输出做短路径图和适应度曲线.
摘要:蚯蚓优化算法(EWA)是一种模拟蚯蚓觅食行为的群体智能优化方法。该算法通过初始化随机种群、评估排序、精英保留、双繁殖机制(镜像探索和交叉重组)、比例因子调度、柯西变异等环节构成闭环优化系统。EWA特别设计了随时间变化的探索-开发平衡策略,前期侧重全局探索,后期转向局部开发。算法还包含边界修复和去重机制,确保解的可行性和种群多样性。实验表明,EWA适用于连续优化问题,具有较好的全局搜索能力和收
操作环境:
MATLAB 2024a
1、算法描述
蚯蚓优化算法(Earthworm Optimization Algorithm,简称EWA)是一类典型的群体智能优化方法,它把“求最优解”这件事,类比成一群蚯蚓在复杂环境里觅食、繁殖、适应环境的过程。你可以把它理解成:在一个很大的搜索空间里,最优解往往藏在某个“地势最低”的位置,而算法要做的,就是让一群个体不断移动、重组、变异、筛选,逐渐从四面八方逼近那个最低点。EWA的有意思之处在于,它不是单纯照搬某一种生物行为,而是把多种“能推动搜索”的机制拼成一个闭环:既要在早期大胆地探索新区域,也要在后期收敛到更优区域,还要避免种群太快变得一样从而陷入局部最优。整个系统运行下来,你看到的不是一段“算出来就结束”的程序,而更像一个有节奏的生态循环:初始化一批蚯蚓个体,评估好坏,保留精英,产生后代,再评估再筛选,如此往复,直到迭代次数到达或收敛趋势明显。
先从EWA的整体结构说起。它本质上是一个迭代系统:每一代都有一群候选解,每个候选解对应一个“蚯蚓”的位置或状态,算法把它叫做染色体或者个体参数。然后通过目标函数去评价每个个体的优劣,这个评价值就是适应度或代价。EWA一般以“代价越小越好”的方式工作,所以排序时会把代价最小的个体放在最前面。这个排序很关键,因为后面的繁殖和筛选都会偏向那些更优秀的个体。你如果把它放在工程优化的场景里理解,就是我们不断尝试不同的参数组合,每次都把表现最好的那几个方案优先保留下来,并让它们的特征更容易传到下一代。
算法最开头的“初始化”阶段,其实决定了EWA能不能跑得稳、跑得快。初始化通常是在上下界范围内随机生成一批个体,让它们在整个搜索空间里尽量“铺开”。这一步的目的很现实:如果一开始就扎堆在某个角落,那后面再怎么繁殖也容易围着局部区域打转,找不到全局更好的位置。EWA在初始化之后还会做一件看似细小但很实用的事情:去重。很多人做群体算法时忽略了这个问题,随机生成的个体有时会非常接近甚至完全一样,一旦出现大量重复,等于浪费了搜索预算。EWA通过检测重复个体并对其做随机扰动,让种群保持多样性,这一步对于后续避免早熟收敛很有价值。
进入迭代之后,EWA的核心可以理解为三件事交替发生:保留最好的、产生新的、控制发散和收敛的节奏。首先是“精英策略”。精英策略在群体算法里非常常见,逻辑也直观:上一代里最优秀的少数个体不要轻易丢掉,直接带到下一代,保证算法的最优记录不会倒退。你可以把它看成企业里保留核心人才,哪怕组织结构有调整,关键岗位的人不能随便换掉。EWA会把前面若干个最好的个体暂存起来,等这一代所有繁殖和变异完成后,再把它们替换回种群里最差的位置。这样做的效果是双重的:一方面最优解稳定提升或保持,另一方面种群仍然可以在剩余个体上大胆尝试,不至于“试错把最好的也试没了”。
然后是EWA最具辨识度的部分,也就是它的繁殖机制。EWA把繁殖分成两条路,你可以把它理解成两种不同风格的“出新方案”的方式:一种偏向对称映射式的探索,另一种偏向交叉重组式的继承与组合。第一种繁殖方式经常被描述成一种“镜像式再生”。直观上,它会把某个个体在搜索空间中的位置做一次对称变换,并加上一个相似系数来控制幅度。你如果从效果去理解,这种方式相当于把当前解“翻到对面去看看”,从而快速跳出原来那片区域。它对探索阶段特别有帮助,因为很多时候局部最优区域附近怎么抖都抖不出去,反而是跳到一个对称的远端区域,才能发现新的更优盆地。这种机制的精髓不在于它的形式有多花哨,而在于它提供了一种“结构化的远跳”,不是完全盲目的随机乱跑,而是基于当前个体位置做一次有规律的扩展。
第二种繁殖方式则更像遗传算法里常见的“交叉”,但EWA在选父代的时候加入了更强的偏好机制,常用的是类似轮盘赌的思想:越优秀的个体被选中成为父代的概率越大。这样做的直觉也很容易理解:好的方案应该更有机会产生后代,但又不能让差的方案完全没有机会,因为差的方案有时也带着某些有用的特征,只是组合方式不对。交叉本身通常采用较轻量的方式,比如按维度随机继承父代某一方的基因,这样得到的新个体既保留了父代的部分优势,又引入了新组合的可能。对于工程问题来说,这种机制很像把两个设计方案的优点拆开重组,比如一个方案热效率好、另一个方案成本低,通过重组希望得到既效率好又成本低的折中解。
EWA还有一个很重要但容易被忽视的设计:它不是简单地“要么用繁殖方式1,要么用繁殖方式2”,而是把两种繁殖结果按比例融合,形成最终的下一代个体。这个比例因子在算法里会随迭代逐步变化,而且通常表现为一种“退火式”衰减:一开始更偏向某种生成方式,后面逐渐向另一种方式靠拢。你可以把它理解成一个很符合人类经验的策略:前期胆子要大,允许更激进的跳跃;后期要更谨慎,更多地在已知的优质区域里做精细调整。这个比例调度其实就是EWA用来平衡“全局探索”和“局部开发”的关键旋钮。探索太强会导致一直飘、不收敛;开发太强又会导致早早扎堆、陷局部。EWA把节奏写进了迭代过程中,让算法的行为随着时间逐步从“到处找”过渡到“在好区域打磨”。
繁殖完成后,EWA通常会引入变异机制来打破同质化。你提供的实现里叫“柯西变异”,从命名上看是想引入一种带重尾特性的扰动,以便偶尔产生较大的跳变,帮助跳出局部最优。就算不深究它在代码里具体怎么采样,你也能把它当成一种“随机扰动+群体统计信息引导”的变异:它不会像纯随机那样完全无方向,而会借助当前种群在某些维度上的平均水平,或者借助当前最优个体的特征,把变异落点拉回到一个相对合理的范围里。这样做能避免变异一发力就跑到边界外,或者生成大量明显无效的个体。更现实地说,它相当于“在主流优秀方案附近做随机试探”,既保持多样性,又不至于离谱。
紧接着就是可行性修复与评估环节。很多优化问题都有明确的边界或约束,例如参数范围、物理限制、结构尺寸限制。EWA在产生新个体之后,会把超出边界的变量裁剪回允许范围,这一步就是最常见的可行性修复。它看起来简单,但非常必要:如果不修复,目标函数可能根本无法评估,或者评估结果毫无意义。修复之后再重新计算所有个体的代价,并再次排序,就形成了这一代的“最终种群”。再结合精英回填,保证最优个体不丢失,整套循环就闭环了。
EWA里还有一个同样实用的环节:再次去重。因为交叉、融合、变异这些操作做完之后,种群里仍然可能出现重复或高度相似的个体,尤其是在后期逐渐收敛时更容易发生。去重的目的不是“强行让它们不相同”,而是尽量避免把宝贵的评估次数浪费在一堆等价方案上。对于高成本目标函数来说,这一点非常关键,比如潮流优化、结构有限元、复杂系统仿真,每一次评估都可能很贵,重复个体就是直接的计算浪费。
如果把EWA的运行过程用更人话的方式串起来,就是:先随机撒一批蚯蚓到搜索空间里,让它们覆盖得尽量广;然后每一代都先把最强的那几条蚯蚓保护起来,剩下的蚯蚓通过两种繁殖方式产生新后代,一种偏远跳探索,一种偏交叉继承;生成的新后代再通过一个随时间变化的比例因子做融合,让搜索行为从早期的激进逐渐过渡到后期的稳健;之后引入变异,让种群别太快变得千篇一律;再把不合法的个体修复回合法范围,重新计算优劣并排序;最后把上一代精英塞回去,确保最优解不会倒退;同时清理重复个体,保持种群的新鲜度。这样循环到指定代数,算法输出的就是最后一代的最优个体及其适应度,同时也会输出一条收敛曲线,告诉你最优值是如何随迭代一步步下降的。
从“每一种技术”的角度去强调,EWA里最值得说清楚的其实是几项关键机制,它们共同决定了算法的气质。第一是基于群体的随机初始化与评估排序,这是所有群体智能的底座,决定了算法能否覆盖搜索空间并形成“优胜劣汰”的方向感。第二是精英保留,这是一种非常工程化的稳定器,让算法在随机操作很多的情况下仍然不会出现“越跑越差”的尴尬。第三是双繁殖机制:镜像式探索提供了跨区域的跳跃能力,交叉式重组提供了从优秀个体中提炼并组合优势的能力,两者分别对应探索与开发的两条主路线。第四是比例因子调度与类似退火的衰减思想,这是EWA在时间维度上控制搜索节奏的关键,它让算法不是死板地重复同一种行为,而是随迭代阶段改变风格。第五是变异机制,它是维护多样性、避免过早收敛的重要补丁,尤其在后期收敛阶段,没有变异的群体算法很容易陷在局部坑里出不来。第六是可行性修复与去重,这是面向实际工程约束的“工程化包装”,保证算法在现实问题里不会因为越界和重复而浪费计算资源或直接崩掉。
很多人第一次接触EWA会问:它和遗传算法、粒子群、差分进化到底有什么区别?从思想上讲,EWA并不追求“完全不同”,它更像是把几种成熟的启发式思想重新组织了一遍,并用“蚯蚓繁殖与再生”的故事把它们串起来。它的优势往往体现在这种“组合拳”的实用性上:既有能走远的机制,也有能收敛的机制;既有保护最优的机制,也有打破一致性的机制;既有面向理论的随机搜索框架,也有面向工程的边界修复与去重处理。你在实际使用时会发现,它对很多连续优化问题都能直接套用,因为它不依赖过于苛刻的数学假设,只要目标函数可评估、有合理边界,就可以跑起来。
当然,EWA这种算法最终效果也很依赖参数设置和问题特性。种群规模太小,多样性不足,容易早熟;太大,计算量上去,单位时间迭代变慢。精英保留数量太多,会抑制探索,太少又可能导致最优解被随机操作破坏。交叉概率、变异概率、相似系数、比例因子的衰减速度,都会影响“先探索还是先收敛”的节奏。如果目标函数噪声大、或者存在大量局部极值,通常需要更强的探索与变异;如果目标函数比较平滑、约束很强,往往更需要稳健的开发与精英保护。换句话说,EWA提供了一套完整的“搜索生态”,但你要让这套生态在你的问题上长得好,还是需要根据问题特性做一些调参和观察,比如看收敛曲线是否过早变平,看种群最优与平均之间的差距是否在合理范围内,看是否频繁出现边界裁剪导致个体扎堆在边界等。
从系统层面总结,蚯蚓优化算法并不是靠某一个“神奇动作”取胜,而是靠一整套流程把随机性变成可控的进步:初始化提供覆盖,排序提供方向,精英提供稳定,双繁殖提供探索与组合,比例调度提供阶段感,变异提供多样性,约束修复保证可行,去重减少浪费。你如果把它当成一个优化框架来用,最好的方式通常是:先保证目标函数与边界处理稳定可靠,再用默认参数跑通,观察收敛趋势和解的稳定性,然后针对“收敛太慢”或“陷入局部”或“解抖动很大”等现象去调节探索与开发的平衡。这样用下来,EWA更像一个能落地的工程工具,而不是只适合论文展示的玩具算法。
2、仿真结果演示


3、关键代码展示
略
4、MATLAB 源码获取
V
点击下方名片关注公众号获取
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)