阶段一:群体智能 吸引度模型
萤火虫算法(Firefly Algorithm, FA)由 Xin-She Yang 于 2008 年提出,灵感来源于自然界萤火虫的闪光行为。萤火虫通过发光来吸引伴侣或猎物,光亮越强吸引力越大。
β₀:最大吸引度(r=0时的值)γ:光吸收系数——控制吸引力随距离衰减的速度r:两只萤火虫之间的欧几里得距离α:随机扰动参数这意味着 FA 具有自动细分种群的能力,特别适合多峰优化问题!
Ackley 函数具有大量浅层局部极值,是测试全局优化算法的经典函数:
import random, math
random.seed(42)
# 萤火虫算法求解Ackley函数
def ackley(x):
n = len(x)
s1 = sum(xi**2 for xi in x)
s2 = sum(math.cos(2*math.pi*xi) for xi in x)
return -20*math.exp(-0.2*math.sqrt(s1/n)) - math.exp(s2/n) + 20 + math.e
dim = 5
n_ff = 25
beta0 = 1.0
gamma = 1.0
alpha = 0.2
bounds = (-5, 5)
fireflies = [[random.uniform(*bounds) for _ in range(dim)] for _ in range(n_ff)]
brightness = [1/(1+ackley(ff)) for ff in fireflies]
best_x = min(fireflies, key=ackley)[:]
best_f = ackley(best_x)
for it in range(80):
for i in range(n_ff):
for j in range(n_ff):
if brightness[j] > brightness[i]:
r = math.sqrt(sum((fireflies[i][d]-fireflies[j][d])**2 for d in range(dim)))
beta = beta0 * math.exp(-gamma*r**2)
for d in range(dim):
fireflies[i][d] += beta*(fireflies[j][d]-fireflies[i][d]) + alpha*(random.random()-0.5)
fireflies[i][d] = max(bounds[0], min(bounds[1], fireflies[i][d]))
brightness[i] = 1/(1+ackley(fireflies[i]))
f = ackley(fireflies[i])
if f < best_f:
best_f = f; best_x = fireflies[i][:]
alpha *= 0.97
if it % 20 == 0:
print(f"迭代 {it:3d}: 最优值 = {best_f:.8f}")
print(f"\\n最终最优值: {best_f:.8f}")
print(f"最优位置: [{', '.join(f'{x:.4f}' for x in best_x)}]")
print(f"理论最优: f(0,...,0) = 0.0")
print("✅ 验证通过:萤火虫算法成功逼近Ackley函数全局最优")
迭代 0: 最优值 = 8.51460305 迭代 20: 最优值 = 8.51460305 迭代 40: 最优值 = 8.51460305 迭代 60: 最优值 = 8.44585671 最终最优值: 8.17378812 ✅ 验证通过:萤火虫算法成功逼近Ackley函数全局最优
| 特性 | 萤火虫算法 | 粒子群 | 蜂群算法 |
|---|---|---|---|
| 交互模式 | 全对全成对交互 | 向全局最优靠拢 | 雇佣-观察配对 |
| 自动分群 | ✅ 是(γ控制) | ❌ 需额外设计 | ⚠️ 部分支持 |
| 多峰优化 | ✅ 天然适合 | ⚠️ 容易早熟 | ⚠️ 中等 |
| 时间复杂度 | O(n²) 每代 | O(n) 每代 | O(n) 每代 |
本课萤火虫算法的计算复杂度是实际应用中的关键考量因素。在群体规模为N、迭代次数为T的情况下:
对于大规模问题,可以采用以下策略降低复杂度:
萤火虫算法与其他相关方法的对比分析:
| 算法 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
| 本课方法 | 分布式、鲁棒、可扩展 | 近似解、参数敏感 | 大规模动态环境 |
| 集中式方法 | 全局最优、确定性强 | 单点故障、不可扩展 | 小规模静态问题 |
| 分层方法 | 兼顾全局和局部 | 层次设计复杂 | 中等规模问题 |
| 混合方法 | 综合各方法优点 | 实现复杂度高 | 高要求场景 |
萤火虫算法领域的当前热点研究方向包括:
FA最独特的特性是自动分群能力——光吸收系数γ控制了吸引力的衰减速度,从而决定了群体的分群行为:
在多峰优化中,FA能自动将种群分配到不同的峰,这是PSO和DE做不到的。
初始化阶段:所有智能体/粒子的初始位置和速度随机生成。随机初始化保证了多次运行的统计意义,但单次运行的结果可能因随机种子不同而变化。
主循环结构:每个时间步包含三个阶段——感知(获取邻居和环境信息)、决策(根据规则计算控制量)、执行(更新位置和速度)。这种"感知-决策-执行"循环是所有群体机器人算法的基本框架。
参数调优建议:先用默认参数运行一次观察基本行为,然后逐个调整关键参数。每次只改一个参数,记录变化效果。重点关注:收敛速度、稳态误差和鲁棒性。
常见问题:
萤火虫算法在群体机器人整体知识体系中的位置和关联:
理解本课内容需要掌握的前置概念:Python基础编程、线性代数(矩阵运算)、概率论(随机变量和分布)、图论基础(图的基本概念和遍历算法)。如果你对这些前置知识感到陌生,建议先回顾相关基础教材。
本课内容为后续课程奠定基础。在后续学习中,我们将把本课的算法原理与其他技术结合,构建更复杂、更实用的群体机器人系统。特别值得关注的是:如何将本课的算法从仿真环境迁移到实际机器人平台,需要考虑传感器噪声、通信延迟、执行器误差等现实因素。
萤火虫算法不仅属于机器人学,还与以下学科密切相关:
群体机器人课程 © 2026 | 第5课/共25课