智能优化算法探索:北方苍鹰、灰狼与蝗虫的搜索与适应度可视化之旅

发布时间:2026/7/8 13:52:28

智能优化算法探索:北方苍鹰、灰狼与蝗虫的搜索与适应度可视化之旅 群智能优化算法搜索过程及适应度可视化 给出了3种优化算法北方苍鹰优化算法(NGO)灰狼优化算法(GWO)蝗虫优化算法(GOA) 无论是自己改进优化算法还是自己提出优化算法该项工作绝对可以起到锦上添花的作用。 可替换性强每个优化算法都有增加可视化结果的前后程序对比您对比着看就能轻松掌握该方法可灵活增加到你自己的优化算法上咱们今天来点硬核但好玩的——用Python把群智能优化算法的搜索过程画出来。这三种算法北方苍鹰NGO、灰狼GWO、蝗虫GOA在论文里看着都差不多但可视化之后你会发现它们的搜索策略天差地别。先看个灰狼算法的二维可视化效果。把下面这段代码塞到你的GWO主循环里if iter % 10 0: plt.clf() plt.scatter(alpha_pos[0], alpha_pos[1], marker*, s200, cgold) plt.scatter(population[:,0], population[:,1], cgray, alpha0.6) plt.xlim(-10,10) plt.ylim(-10,10) plt.title(fGWO Iteration {iter}) plt.pause(0.1)重点来了population[:,0]和population[:,1]这两个切片操作把灰狼群的位置坐标拆成了x和y分量。这里有个坑——很多人直接用Matplotlib画动态图会卡顿记得在循环里加上plt.pause(0.1)让图像刷新不然你会看到窗口直接无响应。北方苍鹰的俯冲行为可视化更有意思。在NGO的位置更新公式后面加个轨迹记录# 在更新位置后记录 trajectory [] def update_position(): global trajectory new_pos ... # 原更新公式 trajectory.append(new_pos.copy()) return new_pos # 绘图时添加轨迹线 plt.plot(np.array(trajectory)[:,0], np.array(trajectory)[:,1], y--, alpha0.3)注意这里用copy()防止数组引用导致的数值覆盖这个细节处理不好会让轨迹线全部重叠在同一点上。alpha0.3参数让轨迹线呈现半透明效果迭代次数多了也不会糊成一团。群智能优化算法搜索过程及适应度可视化 给出了3种优化算法北方苍鹰优化算法(NGO)灰狼优化算法(GWO)蝗虫优化算法(GOA) 无论是自己改进优化算法还是自己提出优化算法该项工作绝对可以起到锦上添花的作用。 可替换性强每个优化算法都有增加可视化结果的前后程序对比您对比着看就能轻松掌握该方法可灵活增加到你自己的优化算法上蝗虫算法的群体排斥可视化最带感。在GOA的适应度计算阶段插入这段from mpl_toolkits.mplot3d import Axes3D # 三维绘图初始化 fig plt.figure() ax fig.add_subplot(111, projection3d) # 在迭代中更新 ax.scatter(population[:,0], population[:,1], fitness, cgreen, depthshadeFalse) ax.view_init(elev30, azimiter*2) # 视角旋转这里elev30把视角固定在30度俯角azimiter*2让图像每迭代一次旋转2度生成动态图时会呈现蝗虫群在三维空间中的盘旋效果。注意三维绘图必须提前导入mpl_toolkits.mplot3d否则会报错找不到投影模式。适应度曲线对比才是重头戏。把三种算法的历史最优值存下来用这个对比脚本plt.plot(gwo_history, r--, linewidth2) plt.plot(ngo_history, g-, linewidth1.5) plt.plot(goa_history, b:, linewidth1) plt.yscale(log) # 关键设置 plt.legend([GWO, NGO, GOA], locupper right, fontsize8)这里yscale(log)用对数坐标能把后期细微变化放大显示。遇到过有些同学抱怨曲线后期都平了看不出区别加上这个设置立刻就能看到算法在收敛阶段的性能差异。最后说个骚操作把三种算法的搜索过程录制成gif用imageio库三行代码搞定import imageio frames [] # 存储每帧图片 # 在每次绘图后执行 frames.append(imageio.imread(temp.png)) imageio.mimsave(compare.gif, frames, duration0.2)注意图片保存路径别写错建议用临时文件过渡。duration参数控制播放速度0.2秒一帧比较适合观察算法动态。把这些可视化技巧加到你的算法里下次投稿论文审稿人绝对眼前一亮——亲测实验部分被审稿人专门表扬过可解释性增强。

相关新闻