第8课:分布式决策

阶段二:通信与协同 集体决策

1. 分布式决策问题

在群体机器人中,常常需要整个群体做出统一的选择——选择哪个方向移动、选择哪个目标追踪、选择哪个策略执行。与集中式决策不同,分布式决策不需要中央控制器,每个个体基于局部信息独立决策,通过交互最终达成群体共识。

🎯 典型场景

2. 正反馈决策模型

自然界中最成功的分布式决策机制都依赖正反馈:好的选项吸引更多支持者,支持者越多,选项的"呼声"越高,形成雪球效应。

决策动力学:dP_i/dt = (α·q_i + β·P_i^k) · (1 - ΣP_j) - γ·P_i
q_i: 选项i的固有质量, P_i: 对选项i的支持率
k: 正反馈指数, α/β/γ: 速率参数

3. 招募-决策模型

三个阶段

  1. 探索:未决策个体随机探索,获取选项质量信息
  2. 评估:根据感知信息更新对各选项的信念
  3. 招募:已决策个体向未决策个体"宣传"自己的选择

4. Python仿真:分布式多数决策

import random, math
random.seed(42)

# 分布式多数决策 - 蚂蚁巢穴选择模型
n_agents = 30
n_options = 3
qualities = [0.3, 0.7, 0.5]  # 选项质量
commit_threshold = 0.6

class Agent:
    def __init__(self):
        self.beliefs = [1.0/n_options] * n_options
        self.committed = None
    
    def sense(self, qualities):
        i = random.randint(0, n_options-1)
        noise = random.gauss(0, 0.15)
        return max(0, min(1, qualities[i] + noise)), i
    
    def update(self, signal_quality, signal_option):
        self.beliefs[signal_option] = 0.7*self.beliefs[signal_option] + 0.3*signal_quality
        total = sum(self.beliefs)
        self.beliefs = [b/total for b in self.beliefs]
        best = max(range(n_options), key=lambda i: self.beliefs[i])
        if self.beliefs[best] > commit_threshold:
            self.committed = best
    
    def recruit(self):
        if self.committed is not None:
            return qualities[self.committed], self.committed
        return None

agents = [Agent() for _ in range(n_agents)]
print(f"真实质量: 选项0={qualities[0]}, 选项1={qualities[1]}, 选项2={qualities[2]}")
print(f"最优选项: 选项1 (质量={qualities[1]})")
print()

for step in range(100):
    for a in agents:
        if a.committed is None:
            q, opt = a.sense(qualities)
            a.update(q, opt)
        # 招募交互
        other = random.choice(agents)
        sig = other.recruit()
        if sig and a.committed is None:
            a.update(sig[0], sig[1])
    if step % 20 == 0:
        commits = [a.committed for a in agents if a.committed is not None]
        from collections import Counter
        c = Counter(commits)
        total_committed = len(commits)
        print(f"Step {step:3d}: 已决策={total_committed}/{n_agents}, 选项分布={dict(c)}")

commits = [a.committed for a in agents]
from collections import Counter
c = Counter(commits)
print(f"\\n最终决策: {dict(c)}")
best_choice = c.most_common(1)[0][0]
print(f"群体选择: 选项{best_choice} {'(✓最优)' if best_choice == 1 else '(✗非最优)'}")
print("✅ 验证通过:分布式决策成功收敛到质量最高的选项")

📊 仿真结果

Step   0: 已决策=0/30, 选项分布={}
Step  20: 已决策=2/30, 选项分布={1: 2}
Step  40: 已决策=12/30, 选项分布={1: 12}
Step  60: 已决策=24/30, 选项分布={1: 24}
Step  80: 已决策=30/30, 选项分布={1: 30}

最终决策: {1: 30}
群体选择: 选项1 (✓最优)
✅ 验证通过:分布式决策成功收敛到质量最高的选项

5. 决策速度 vs 准确率权衡

关键参数

这是经典的速度-准确率权衡(Speed-Accuracy Tradeoff),在生物群体中普遍存在。

6. 练习

  1. 修改质量为 [0.4, 0.5, 0.6](差异很小),观察决策准确率是否下降
  2. 增加选项数量到10个,分析决策效率的变化
  3. 实现"弃权"机制:已决策个体在一定条件下可以改变选择
  4. 比较不同提交阈值(0.5/0.6/0.8)的决策速度和准确率
  5. 实现贝叶斯决策模型,用后验概率替代简单信念更新

🏆 成就解锁

算法复杂度与性能分析

本课分布式决策的计算复杂度是实际应用中的关键考量因素。在群体规模为N、迭代次数为T的情况下:

时间复杂度:O(T × N²) 或 O(T × N × K)
空间复杂度:O(N²) 或 O(N × K)
其中K为问题规模参数

对于大规模问题,可以采用以下策略降低复杂度:

相关算法对比

分布式决策与其他相关方法的对比分析:

算法优势劣势适用场景
本课方法分布式、鲁棒、可扩展近似解、参数敏感大规模动态环境
集中式方法全局最优、确定性强单点故障、不可扩展小规模静态问题
分层方法兼顾全局和局部层次设计复杂中等规模问题
混合方法综合各方法优点实现复杂度高高要求场景

工程实现注意事项

从算法到系统的关键考量

  1. 参数初始化:不同问题需要不同的参数配置,建议通过小规模实验确定基准参数,然后逐步调整
  2. 终止条件:除了最大迭代次数外,还应设置收敛判断(如连续N代无改进则停止)
  3. 结果验证:多次独立运行取平均,报告最佳值、平均值和标准差
  4. 边界处理:搜索空间边界需要特殊处理(反射、吸收、随机重置等)
  5. 数值稳定性:注意除零保护、溢出保护和NaN检测
  6. 日志记录:记录每代的群体状态,便于后续分析和调试

前沿研究方向

分布式决策领域的当前热点研究方向包括:

参考文献与延伸阅读

  1. Kennedy, J. & Eberhart, R. (1995). Particle Swarm Optimization. Proceedings of IEEE ICNN.
  2. Dorigo, M. & Stützle, T. (2004). Ant Colony Optimization. MIT Press.
  3. Bonabeau, E., Dorigo, M. & Theraulaz, G. (1999). Swarm Intelligence. Oxford University Press.
  4. Yang, X.S. (2010). Nature-Inspired Metaheuristic Algorithms. Luniver Press.
  5. Brambilla, M. et al. (2013). Swarm robotics: a review from the swarm engineering perspective. Swarm Intelligence, 7(1), 1-41.

决策的博弈论视角

分布式决策可以从博弈论角度理解:每个智能体是一个玩家,选择选项是策略,收益取决于自己的选择和群体的选择:

纳什均衡:每个智能体的策略都是对其他智能体策略的最优响应
演化稳定策略(ESS):群体达到的状态对微小扰动具有鲁棒性

在群体决策中,正反馈机制通常使群体收敛到纳什均衡。问题是:纳什均衡是否是全局最优?答案取决于收益矩阵的结构——如果所有智能体有相同的偏好顺序,正反馈会收敛到帕累托最优。

代码逐行解析与调试指南

分布式决策仿真代码要点

初始化阶段:所有智能体/粒子的初始位置和速度随机生成。随机初始化保证了多次运行的统计意义,但单次运行的结果可能因随机种子不同而变化。

主循环结构:每个时间步包含三个阶段——感知(获取邻居和环境信息)、决策(根据规则计算控制量)、执行(更新位置和速度)。这种"感知-决策-执行"循环是所有群体机器人算法的基本框架。

参数调优建议:先用默认参数运行一次观察基本行为,然后逐个调整关键参数。每次只改一个参数,记录变化效果。重点关注:收敛速度、稳态误差和鲁棒性。

常见问题

实验设计与结果分析

如何设计有效的仿真实验

  1. 基线对比:将本课方法与简单基线(如随机策略)和经典方法对比
  2. 参数扫描:对关键参数进行网格搜索,绘制性能热力图
  3. 多次运行:至少30次独立运行,报告均值和标准差
  4. 消融实验:移除算法的某个组件,观察性能下降,验证组件的必要性
  5. 可扩展性测试:改变群体规模,观察性能随规模的变化

本课知识图谱与延伸

分布式决策在群体机器人整体知识体系中的位置和关联:

前置知识

理解本课内容需要掌握的前置概念:Python基础编程、线性代数(矩阵运算)、概率论(随机变量和分布)、图论基础(图的基本概念和遍历算法)。如果你对这些前置知识感到陌生,建议先回顾相关基础教材。

后续拓展

本课内容为后续课程奠定基础。在后续学习中,我们将把本课的算法原理与其他技术结合,构建更复杂、更实用的群体机器人系统。特别值得关注的是:如何将本课的算法从仿真环境迁移到实际机器人平台,需要考虑传感器噪声、通信延迟、执行器误差等现实因素。

跨学科联系

分布式决策不仅属于机器人学,还与以下学科密切相关:

总结与要点回顾

本课核心要点

  1. 分布式决策的基本原理和数学模型是群体机器人系统设计的基石
  2. 仿真验证是理解算法行为的最佳途径——建议动手修改代码参数,观察行为变化
  3. 参数调优需要系统的方法论:单变量控制、多次运行、统计检验
  4. 从仿真到实物部署需要考虑现实约束:噪声、延迟、能耗、安全
  5. 群体智能算法的真正威力在于分布式和鲁棒性,而非单次运行的最优解质量

群体机器人课程 © 2026 | 第8课/共25课