当前位置: 首页 > news >正文

深夜撸代码突然发现个好玩的东西——萤火虫算法搞路径规划居然能整得跟游戏似的。这玩意儿不仅能自定义地图随时存档,还能动态改起点终点,简直是摸鱼必备神器(不是)

路径规划算法:基于萤火虫算法的路径规划算法 本程序支持地图任意创建保存,时点任意更改。 萤火虫算法(Firefly Algorithm,简称FA)是一种基于模拟萤火虫的行为和交流方式的群体智能优化算法。 与其他优化算法相比,萤火虫优化算法具有以下优点: 并行性强:萤火虫优化算法的计算过程中可以并行处理多个个体,这意味着它的计算速度相对较快。 全局搜索能力强:萤火虫优化算法引入了随机行为,可以避免陷入局部最优解。 萤火虫之间通过发出光信号来吸引其他萤火虫,并根据光信号的亮度来决定其移动方向,从而实现全局搜索。 对问题空间连续性要求低:萤火虫优化算法对问题的可行解表达形式没有过高的限制,在离散和连续的问题空间中都能够灵活适应,并有效寻找到合适的优化解。 算法参数设置相对简单:相比其他复杂的优化算法,萤火虫优化算法的参数设置相对简单,不需要过多的调参工作。 可以应用于多种问题领域:萤火虫优化算法在路径规划、组合优化、函数优化等问题领域都有广泛的应用,具有较好的通用性和适应性。

先整张地图试试水。咱直接写了个支持障碍物随机生成的地图类,核心就一个二维数组:

class PathMap: def __init__(self, size=20): self.grid = [[0]*size for _ in range(size)] # 0可通行 1障碍 self.start = (0,0) self.end = (size-1, size-1) def add_obstacle(self, x, y): self.grid[x][y] = 1 # 随手戳个障碍物 def save_map(self, filename): # 存成json方便随时改 with open(filename,'w') as f: json.dump({'grid':self.grid,'start':self.start,'end':self.end}, f)

重点来了!萤火虫的骚操作在于每只虫子都自带发光属性。亮度由路径长度决定,越短的路径越亮:

class Firefly: def __init__(self): self.path = [] # 走过的坐标序列 self.brightness = float('inf') # 路径总长度 def update_brightness(self): total = 0 for i in range(1, len(self.path)): # 简单粗暴的欧式距离 total += ((self.path[i][0]-self.path[i-1][0])**2 + (self.path[i][1]-self.path[i-1][1])**2)**0.5 self.brightness = total if valid_path else float('inf')

关键吸引力计算这块儿特别有意思——亮虫子会吸引暗虫子,但吸引力随距离衰减。这里用了平方反比定律(物理老师狂喜):

def attraction(firefly_a, firefly_b): distance = np.linalg.norm(np.array(firefly_a.pos) - np.array(firefly_b.pos)) beta = 1 / (1 + 0.1 * distance**2) # 衰减系数 return beta * (firefly_b.brightness - firefly_a.brightness)

实际跑算法时最带感的还是移动过程。萤火虫不仅会被更亮的同伴吸引,还会带点随机扰动(防止集体智障卡在局部最优):

# 在算法主循环中 for i in range(n_population): if fireflies[i].brightness > fireflies[j].brightness: # 朝着更亮的虫子移动 direction = (fireflies[j].path - fireflies[i].path) * attraction_force # 加点随机扰动 fireflies[i].path += direction + alpha * np.random.randn()

实测发现当遇到死胡同时,随机扰动参数alpha调大点就能让虫子们"踹门"突围。曾经有个U型障碍测试案例,传统A*直接懵逼,萤火虫群硬是靠随机扰动把墙给"蹭"穿了。

路径规划算法:基于萤火虫算法的路径规划算法 本程序支持地图任意创建保存,时点任意更改。 萤火虫算法(Firefly Algorithm,简称FA)是一种基于模拟萤火虫的行为和交流方式的群体智能优化算法。 与其他优化算法相比,萤火虫优化算法具有以下优点: 并行性强:萤火虫优化算法的计算过程中可以并行处理多个个体,这意味着它的计算速度相对较快。 全局搜索能力强:萤火虫优化算法引入了随机行为,可以避免陷入局部最优解。 萤火虫之间通过发出光信号来吸引其他萤火虫,并根据光信号的亮度来决定其移动方向,从而实现全局搜索。 对问题空间连续性要求低:萤火虫优化算法对问题的可行解表达形式没有过高的限制,在离散和连续的问题空间中都能够灵活适应,并有效寻找到合适的优化解。 算法参数设置相对简单:相比其他复杂的优化算法,萤火虫优化算法的参数设置相对简单,不需要过多的调参工作。 可以应用于多种问题领域:萤火虫优化算法在路径规划、组合优化、函数优化等问题领域都有广泛的应用,具有较好的通用性和适应性。

最后给个可视化效果:

plt.ion() # 开启交互模式 while True: plt.clf() plt.imshow(map.grid, cmap='binary') for firefly in swarm: x_coords = [p[0] for p in firefly.path] y_coords = [p[1] for p in firefly.path] plt.plot(y_coords, x_coords, alpha=0.3) plt.pause(0.1) # 动态显示虫群移动

看着一群光点在地图上蜿蜒爬行最后汇聚成一条最优路径,这治愈程度堪比ASMR。不过要注意别让步长太大,否则虫子们会像磕了药似的满屏乱窜(别问我怎么知道的)

http://www.jsqmd.com/news/372068/

相关文章:

  • 高效掌握蓝奏云直链生成:提升文件分享效率的完整指南
  • 云盘加速工具:多平台下载解决方案的技术实现与应用分析
  • 蓝奏云直链解析:技术侦探的逆向工程手记
  • Awoo Installer零基础完全指南:4步掌握Switch游戏安装终极技巧
  • 8大平台如何突破网盘限速?直链解析技术全解析
  • 为什么你的Seedance2.0插件始终“加载中”?揭秘内核级插件注册器超时阈值(附config.yaml精准调优参数)
  • 3个步骤掌握paraphrase-multilingual-MiniLM-L12-v2:从入门到实践
  • 3大突破!Genymotion ARM Translation革新x86模拟器兼容性
  • refined-now-playing-netease插件技术实现从0到1:网易云音乐播放界面深度解析
  • PyWxDump:微信数据解密与导出工具全攻略
  • 发现非功能需求
  • 如何用3个阶段让老旧电脑流畅运行3A游戏?告别卡顿的实战技巧
  • 微信聊天记录导出与数据库解密完整指南
  • 4个维度掌握SumatraPDF:轻量级文档阅读器的高效使用指南
  • 如何解决文件分享跳转难题?3个方法让下载体验提升80%
  • Windows苹果设备驱动安装难题?这个轻量工具让90%的连接问题迎刃而解
  • 云盘下载加速:技术原理与高效应用指南
  • AI绘画入门指南:零基础上手chilloutmix模型高效创作
  • “AI鼻”与数字调香师:国产PLM如何重构香精香料研发的底层逻辑
  • Windows苹果设备驱动免iTunes解决方案:极速配置跨系统连接与USB共享
  • 如何突破QQ音乐格式限制:QMCFLAC2MP3工具让音乐自由实现
  • 零基础OFD转PDF高效指南:从格式兼容到批量处理全攻略
  • 太空算力中国天算的DeepSeek时刻(2026年)
  • 高效网页转图片全攻略:wkhtmltoimage-amd64技术详解与实战指南
  • 115云盘Kodi插件零门槛配置指南:打造家庭影院新体验
  • 一人公司(OPC)发展研究2.0版(2026.1)
  • 解锁免费商用多场景适配的开源中文字体:设计师必备的思源宋体全攻略
  • 需求-法律需求
  • Nugget极速下载工具:突破传统瓶颈的效率提升方案
  • 解锁游戏辅助新体验:开源工具新手入门指南