路径规划算法基于萤火虫算法的路径规划算法 本程序支持地图任意创建保存时点任意更改。 萤火虫算法Firefly Algorithm简称FA是一种基于模拟萤火虫的行为和交流方式的群体智能优化算法。 与其他优化算法相比萤火虫优化算法具有以下优点 并行性强萤火虫优化算法的计算过程中可以并行处理多个个体这意味着它的计算速度相对较快。 全局搜索能力强萤火虫优化算法引入了随机行为可以避免陷入局部最优解。 萤火虫之间通过发出光信号来吸引其他萤火虫并根据光信号的亮度来决定其移动方向从而实现全局搜索。 对问题空间连续性要求低萤火虫优化算法对问题的可行解表达形式没有过高的限制在离散和连续的问题空间中都能够灵活适应并有效寻找到合适的优化解。 算法参数设置相对简单相比其他复杂的优化算法萤火虫优化算法的参数设置相对简单不需要过多的调参工作。 可以应用于多种问题领域萤火虫优化算法在路径规划、组合优化、函数优化等问题领域都有广泛的应用具有较好的通用性和适应性。先整张地图试试水。咱直接写了个支持障碍物随机生成的地图类核心就一个二维数组class PathMap: def __init__(self, size20): 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, cmapbinary) 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, alpha0.3) plt.pause(0.1) # 动态显示虫群移动看着一群光点在地图上蜿蜒爬行最后汇聚成一条最优路径这治愈程度堪比ASMR。不过要注意别让步长太大否则虫子们会像磕了药似的满屏乱窜别问我怎么知道的