1. 传统编队的"指挥失灵":为什么我转向了博弈论
1.1 一个让我印象深刻的模拟任务场景
先说一件让我印象特别深的事。去年我们在某高校实验室里搭了一套人机编队模拟环境:一台地面操作站加10架小型四旋翼,任务是在一片模拟城区环境里完成区域搜索,操作员需要随时调整编队的整体航向、队形宽度和关注区域。刚开始我们用的是行业内很常见的做法,底层一致性算法保持队形,上层由操作员给一个编队参考点,整群飞机跟踪这个点移动。听起来没什么问题,但第一次联调就给了我一个下马威。
操作员在屏幕上看到右侧疑似有目标,想带着机群向右偏一点,但他手里的手柄输入是一个"期望速度方向"。底层编队控制器为了保证队形误差最小化,把航向修正指令强行拉回预设航线,两股指令在无人机上打架。结果机群出现了明显的"S形摇摆":操作员越想往右,机器越往左纠正,两个人来回拉扯了十几秒,直到操作员放弃。这个现象在仿真里看数据特别清楚——期望航向与实际航向的误差曲线像一把锯齿,完全没有收敛的意思。
这并不是某个控制参数没调好,而是整个控制架构出了问题:编队保持被定义为第一优先级,操作员的意图被当成外部干扰来处理。我当时就在想,人和机器明明在协同完成同一个任务,为什么系统设计却把他们放在了对立面?如果我们不改变建模方式,继续在底层加各种"防人手抖"的滤波、限幅,只会让机器更"顽固",而人更挫败。
1.2 一致性算法和虚拟结构法的边界
为了把问题说透,我简单梳理一下传统的两个主流思路。一致性算法(Consensus-based)的思路是让每架飞机通过邻居之间的状态交互逐渐收敛到共同的速度和位置,好处是分布式、扩展性好;虚拟结构法(Virtual Structure)则把整个编队看成一个刚体,每架飞机跟踪刚体上的固定锚点,好处是队形保持精度高、好理解。这两个方法在无人机编队里应用极广,论文一抓一大把,稳定性和收敛性分析也都比较成熟。
但它们都有一个共同的隐含假设:存在一个明确的、可量化的编队参考输入。要么是虚拟结构的中心点轨迹,要么是操作员给一个期望速度,然后所有飞机去跟踪。在这个假设下,人的角色被简化成一个"参考信号生成器"。问题是,真实的人机协同任务中,操作员不是每时每刻都清楚自己要给什么参考信号的。他是在根据屏幕上的实时态势边看边想边调整的,动作本身带有试探性、延迟性和模糊性。你用一致性算法去跟踪一个模糊的、实时变化的输入,本质上是把一个"跟随问题"硬做成一个"跟踪问题",自然会出现对抗。
还有一点容易被忽略:传统编队控制通常把人和机器的决策时序看成同步的,但实际任务里人的决策频率很低,每秒可能就几次,底层飞控的决策频率却高达几十赫兹甚至上百赫兹。这种频率不匹配导致编队控制器在两次人工指令之间会"自作主张"地做很多修正,而这些修正在人看来就是"机器不听话"。我后来复盘时意识到,人机编队真正难的点不是队形保持本身,而是两种截然不同的决策模式如何在一个框架里共存。
1.3 博弈论登场:把人和机器放进同一套决策天平
后来让我真正转变思路的,是一篇关于无人机追逃博弈的综述。追逃问题里,追击者和逃逸者各自优化自己的收益,谁也不完全控制谁,但最终系统会收敛到某种均衡状态。我一下子被点醒了:人机编队里,人和机器不就是这样吗?人想要的是任务效率最大化,机器想要的是编队代价最小化,两个目标不完全一致,但谁也不能单方面决定最终结果。与其在控制架构里强行把人的意图压下去,不如承认人和机器是平等的博弈参与者,把它们的目标函数同时写进一个优化框架里,再求解这个博弈的均衡。
这就是"博弈论驱动的人机编队"这个想法最初的样子:把编队控制问题改造成人机之间的动态博弈问题。操作员根据自己的态势感知给出期望行为,无人机群根据编队约束和任务目标给出响应行为,两者通过支付函数(也就是收益函数)互相影响,最终在一轮轮的交互中收敛到一个双方都能接受的编队策略。这个思路不是要取消人的主导权,相反,是在数学上给人留了明确的位置,让机器的"顺从而非盲从"可以被量化设计。
我后面会详细讲建模和求解的过程,但先说结论:换到博弈框架之后,同样那个搜索场景,机群不再跟操作员"硬顶",而是根据操作员的累计指令趋势去预测他的意图,再结合编队约束选择响应。整个交互平滑了很多,目视通道穿越时间缩短了大约40%,而且操作员的操控负荷主观评分明显下降。这让我确信,方向是值得继续深挖的。
2. 人机编队的博弈建模:角色、行动集与支付函数
2.1 领导者-跟随者模型的人机映射
人机编队用博弈论建模,首先要想清楚参与者之间的地位关系。我在团队里最开始尝试的是完全对称的非合作博弈——人和机器同时做决策、同时优化各自的目标,但很快发现这在工程上既不现实也没必要。原因很简单:人的决策速度远慢于机器,如果要求两边"同时出招",每一步都得等人,系统实时性完全没法保证。所以后来我们改用了斯塔克尔伯格博弈(Stackelberg Game)框架,这也是目前人机协同里比较常见的结构。
在这个模型里,操作员是领导者,先给出自己的决策——比如期望的编队侧移量、速度变化或搜索热点区域;无人机群作为跟随者,观测到领导者的决策后,在自己的可行空间内选择最优响应。这里有个关键点:领导者做出决策时,已经预见到跟随者会怎么回应,所以他会把自己的"最佳回应函数"考虑进去;跟随者则在给定领导者决策的前提下做局部最优。一先一后,正好匹配了"人慢机快"的天然节奏。
举个具体例子。操作员想调整编队队形从楔形变为横排,以扩大搜索覆盖宽度。在斯塔克尔伯格模型里,这个动作被建模为领导者的一个行动选择,无人机群的最优响应则是:在满足安全间距、动力约束的前提下,选择最平滑的队形变化路径。操作员在做出决策前,系统已经给他做了提示——基于当前机群状态和预测响应,这个队形切换需要多长时间、会不会导致局部碰撞风险升高。这其实就是博弈论里"领导者预见追随者反应"的工程化落地。
2.2 支付函数设计:机器的"听懂"与人的"预期"
有了角色关系,接下来的核心工作就是设计双方的支付函数。如果有人问我做博弈论驱动系统到底难在哪,我会说建模九成的时间都在设计支付函数,所谓"博弈论"的求解方法反而是相对成熟的部分。你得把模糊的、文字描述的任务目标翻译成确定的、可微的、数值化的收益函数,这不只是技术活,更是"翻译"活。
我给无人机群设计的支付函数包含三个分量:编队代价、任务代价、人机一致性代价。编队代价就是各机与期望队形位置的偏差平方和;任务代价是搜索覆盖率或目标跟踪误差的惩罚项;人机一致性代价是机器行为与操作员指令的偏离程度。整体机上收益取这三个分量的负加权和,权重标定通过实验数据来调。操作员的支付函数则更简单一些,主要是任务完成指标加上操控平滑度惩罚,因为操作员也不希望机群反应过度。
这里有一个很关键的细节:人机一致性代价不能直接定义为"机器必须执行操作员每一条指令",而应该是"机器行为应当与操作员指令的短期趋势一致"。举个极端情况,操作员手抖了一下,给了一个很短的横向速度脉冲,如果机器完全照做,编队会瞬间扰动。所以我们在人机一致性代价里引入了一个滑动窗口的期望匹配,让机器对瞬时指令做平滑,但对持续趋势做快速响应。这本质上是把人机交互中的噪声和意图分开处理,从我实测的结果来看,这个设计直接决定了系统会不会"精神分裂"。
2.3 合作与非合作:不同任务场景下的建模取舍
博弈论的大框架里还有一个分叉点我们绕不开:这个博弈是合作的还是非合作的?我在实际项目中把两种都用过,说一点个人体会。如果任务目标是"机群发现目标并跟踪、操作员负责全局决策",这时候人和机器的目标大体一致,分歧只在于执行细节,我会用合作博弈的思路——把人和机器改造成共同优化一个全局目标,只是人拥有更大权重。这种建模的好处是收敛性好、整个系统行为容易解释,坏处是它本质上又回到了"单一优化问题",人机对抗的刻画能力变弱了。
反过来,如果任务是"有人在临机改变任务优先级"或者"操作员可以在不同子任务间切换注意力",人与机器的目标分歧会变得真实且持续,我会选择非合作博弈。比如操作员可能为了规避突发威胁而要求编队立即散开,但这个要求与编队保持的默认目标明显冲突。此时合作博弈模型会试图弹回一个"折中解",而非合作博弈允许系统进入一个"对抗平衡"——机器保持编队完整性的下限,同时尽可能满足散开要求。最后得到的解更像现实世界里两个理性主体讨价还价的结果。
我的建议是:不要在一套系统里只绑定一种博弈范式。我们在实际实现中做了一层决策器,先根据任务阶段判断当前是合作模式还是非合作模式,再选择对应的求解器。这个切换逻辑放在任务管理层,不涉及底层飞行控制,实现起来不复杂,但对任务表现的影响相当大。
3. 从均衡求解到实时控制:工程落地路径
3.1 解析近似的适用条件
模型建好了,下一步就是求解。很多刚接触博弈论的人会一头扎进各种非线性求解器,但我会先泼一盆冷水:在飞行控制这个时间尺度上,你几乎没有可能每一步都做大规模数值博弈求解。所以工程化的第一步,是先看你能不能把博弈模型简化到有解析解的程度。
我们早期版本的模型里,把无人机群的编队代价近似成二次型,把操作员的期望行为近似成线性反馈策略,这样整体上变成了一个线性二次型动态博弈。这种模型是有经典结论的。对于斯塔克尔伯格博弈,领导者先动、跟随者后动,可以用动态规划求得闭环反馈形式的均衡解;更具体地说,是解一组耦合的黎卡提方程。解析解的好处不仅是算得快,更在于你能直接分析系统的稳定性、收敛速率和参数敏感性,这对于调试期的排查特别有价值。
那什么时候可以用解析解?我的判断标准是:参与者的行动空间连续、支付函数近似二次、系统动力学可以线性化。人机编队的队形调整、速度协同这类问题基本满足这些条件。但一旦引入离散的队形切换决策(比如从楔形变横排需要走一条"换形路径")、或者非凸的安全约束(比如障碍区),解析解就撑不住了。
3.2 数值求解的实时性优化路线
在带约束、非线性的场景下,我们不得不上数值方法。第一版我用了最直接的办法:每100毫秒做一次嵌套优化。外层枚举操作员的少量候选决策(比如左移、右移、收窄、散开),内层对每个候选决策求解机群的凸优化问题,选出能让双方支付函数达到"领导者-跟随者均衡"的候选动作。这个"枚举+凸优化"的组合在实时性上是可行的,因为凸优化问题用开源的嵌入式求解器可以在几十毫秒内拿到结果,枚举的候选动作数量控制在一二十个以内。
这个方案踩过不少坑,后面第4章我会专门说。我这里先强调一个容易被忽视的点:博弈论的均衡求解和传统的单一目标优化有个本质区别,你要时刻处理两个参与者的目标函数相互嵌套。在数值实现上,这意味着每次迭代不仅要算机器的最优响应,还要算"操作员的决策对机器最优响应的影响"。如果你只优化机器的代价函数,忽略操作员的决策反馈,那本质上还是传统编队控制,根本谈不上博弈。
另外一个工程技巧是用上一次的均衡解作为这一次迭代的初始猜测。人机交互是连续过程,两帧之间的最优解通常不会跳变太远,热启动可以把求解时间再压缩一半以上。我用这个技巧把典型的博弈求解耗时从80毫秒级别压到了30毫秒左右。这个优化很重要,因为我们在跑10架飞机的编队,留给博弈决策的时间窗口本身就不宽裕。
3.3 滚动时域里的重规划机制
博弈论的一个经典假设是参与者都是"全局理性"的,会基于整个时间域做优化。但真实的人机任务没有尽头,操作员随时可能改主意,机群不可能真的从头到尾规划一条最优路径。所以我们在工程上用**滚动时域(Receding Horizon)**机制把博弈求解框在一个有限时间窗口内。
具体做法是:每500毫秒做一次重规划,每次只优化未来3到5秒的编队策略。在这个窗口内,我们把操作员的行为模型预测为"保持当前趋势、缓慢变化",这就成了一个标准的有限时域斯塔克尔伯格博弈。求解完,取窗口内前1秒的执行,到下一个周期用新的观测数据重新求解。这样做的好处就是系统能不断吸收操作员的新意图,不会因为某个窗口内的极端假设而锁死行为。
滚动时域还有一个隐藏的收益:它天然缓解了博弈模型中人未必完全理性的问题。因为真实操作员的行为很难完全符合理性人假设,全局博弈模型越大,模型偏差就越大;反而是短窗口内,行为模式简单,预测准确率高。这也算是一种"复杂性后置"——与其在模型里穷尽人的所有行为模式,不如通过高频重规划不断修正。
4. 实测中出现的问题与排查过程:不是算法不行,是建模错了
4.1 编队震荡:支付函数里缺了一项"相对速度"罚分
系统跑起来之后,第一个明显的问题是编队整体出现了周期性的"呼吸"——相邻无人机之间的距离会像潮汐一样忽大忽小,周期大概一两秒。正常情况下编队间距波动不应该超过半米,可实测波动到了一米二左右,虽然没撞机,但队形质量已经肉眼可见地差了。
我一开始怀疑是博弈求解器的收敛精度不够,把求解阈值从1e-6调到1e-8,没有任何改善。后来我把记录的无人机状态数据拉出来逐帧看,才发现问题出在支付函数上:我只给编队设计了"位置偏差"惩罚项,却没有设计"相对速度"惩罚项。结果机群在响应操作员趋势指令时,每架飞机都各自朝目标位置最优地移动,但由于起始位置不同、动力响应不同,它们之间的相对速度在那个瞬间出现了较大的不一致,下一步模型又看到位置偏差增大,再猛烈修正,这就形成了震荡。
这个发现让我意识到一个建模原则:支付函数里每一项物理量的设计,必须对应系统动力学的"状态"而非仅仅是"终态"。只罚位置偏差,系统就只知道该去哪,不知道该怎么平稳地去;加上相对速度罚分、相对加速度罚分,机群的"呼吸效应"很快就消掉了。这也是后来我在所有支付函数设计里都会保留的一组项,宁可权重调低,也不能没有。
4.2 机器对操作员意图的响应滞后:模型预测的采样窗口
第二个问题是响应滞后。现象是操作员已经明确给出了一个转向意图,机群却要慢个半拍才开始动,那种"不跟手"的感觉非常难受。刚开始我以为是人机一致性代价的权重调得太低了,于是把权重从0.3一路调到0.6,结果问题依旧。最后查到了采样窗口上。
前面2.2节提到,我在人机一致性代价里用了滑动窗口的期望匹配。最开始这个窗口宽度设的是1.5秒。我当时的逻辑是,操作员的指令噪声频率较高,窗口越长平滑效果越好。但实测发现,1.5秒的窗口意味着机器要"观望"操作员1.5秒的趋势,才敢确定他是真的要转向。在实操里操作员的指令早就在0.5秒内明确了,剩下的1秒全是在"等机器确认",滞后感自然就出来了。
我把窗口从1.5秒缩到0.6秒,同时加强了指令的幅值滤波,发现响应灵敏度提升明显,机群也不再会对瞬时小幅指令做出过度反应。这里有个经验:不要用一个参数同时解决两个问题。平滑噪声靠幅值阈值和低通滤波,识别意图靠缩短趋势观测窗口,两个机制分开处理,效果才会好。
4.3 通信时延下的均衡漂移:一次失败带来的教训
第三个问题最棘手,也最有代表性。在室外场地测试的时候,我们用的是自组网电台通信,单跳时延大概100到200毫秒。机群在低时延仿真里表现良好,但一到真实信道,编队开始出现明显的"均衡漂移"——每经过一轮交互,编队的整体位置就会偏离期望值一小截,几轮之后就歪得不能忍了。
我排查了很久才发现机制:博弈求解的输入是操作员指令和机群状态,通信时延让机群状态到达决策器时已经是"过去的状态";决策器基于这个过期状态求出来的均衡解,投递回机群时又经历了第二次时延。两次延迟叠加,相当于控制器在用一个显著滞后的反馈信号做决策,这天然就会造成稳态偏差。
解决办法是在状态预测模块里加了通信时延补偿,用机群的动力学模型预测当前时刻的实际状态,再把这个预测状态送进博弈求解器。同时,针对时延会放大操作员指令与机器响应之间的错位,我们在支付函数的人机一致性项里做了时间对齐,让机器用"操作员给出指令时的预期位置"来匹配自己的响应,而不是用当前实时位置。这个细节改完后,均衡漂移基本消失了,室外测试的队形精度恢复到了跟仿真接近的水平。
5. 边界与建议:别把博弈论当万能钥匙
5.1 参数标定的现实:支付函数权重不是拍脑袋定的
参数标定是博弈论系统里最容易被低估的工作。支付函数里的权重如果靠感觉调,你会发现同一个系统在不同任务模式下表现起伏特别大——某个权重在搜索任务里表现很好,到了目标跟踪任务里就频繁出现"机器反应过度"。我后来搭了一套半自动标定流程:录制操作员执行多组典型任务的操作数据,然后把操作员的实际行为当作"最优行为"的标签,反推支付函数的权重组合,让模型预测的行为尽可能接近真实行为。
这个过程本质上是一个参数辨识问题,在工程实现上可以借助优化工具自动求解。但我建议还是保留人工审查环节,因为有些权重组合虽然数值上拟合得很好,物理上却解释不通——比如某权重为负,意味着"偏离编队位置反而收益更高",这在安全性上不可接受。我们实践下来,先自动辨识再人工筛选,把可解释性作为硬约束,这样可以有效避免模型在常见场景里做出反直觉的决策。
5.2 什么场景真的不该用博弈论
我在做这个项目之前,有一段时间有一种"手里有锤子看什么都是钉子"的心态,想把所有编队控制问题都套进博弈论。后来撞了几次墙,才慢慢总结出哪些场景真的不适合。如果任务目标非常明确、环境完全已知、人只做低频的高层决策(比如设定航点后就不再干预),传统的一致性算法和虚拟结构法已经完全够用,引入博弈论只会增加计算负担和参数调优成本。
另一个不适合的情况是任务对行为可预测性要求极高,比如严格意义上的编队表演或者有大量安全冗余约束的场景。博弈论的系统行为本质上是"多方权衡"的结果,不如规则驱动方法那么刚性。在安全攸关的场景里,我建议把博弈决策放在上层做任务规划,底层仍然保留一套确定性的安全保护控制器——一旦机群间距突破安全阈值,底层直接接管,不让博弈层的输出直接作用于飞行控制。这种"上层博弈、下层兜底"的分层架构是我目前觉得最稳妥的落地方案。
5.3 值得继续做的方向
最后聊几个我觉得后续值得深入的方向。操作员行为模型目前还是很粗糙的,基本假设就是"短时趋势延续"。如果能把操作员的注意力分布、工作负荷状态也建模进博弈过程,支付函数就更贴近真实。比如操作员在任务负载高的时候,机器可以自动降低对一致性的追求,更多承担自主决策——这本质上是一个"博弈规则随人而变化"的机制,很有想象空间。
另外,现在的博弈模型主要是单领导者-单跟随者的结构,机群内部的交互其实是靠编队代价隐式建模的。如果任务规模扩大,有多个人类操作员分别控制不同的子编队,就会变成多领导者-多跟随者的博弈,求解复杂度指数上升,目前公开的资料和可借鉴的经验都不多。这个方向挑战很大,但也确实值得跟踪,人机编队最终要走向的,一定是"多人在回路上、多机在编队里"的复杂协同模式。
如果让我给打算入这个领域的人留一条建议,那就是:先花一半的时间把博弈模型和任务场景对齐,拿到一手实验数据反复验证支付函数,再花另一半的时间做工程实现。我曾走过一个本末倒置的路,先花了不少时间去打磨求解器,结果被人机交互数据一检验,发现支付函数本身就偏差较大,只好推倒重来。数学工具再精巧,最终落地的关键还是你对"人和机器到底在争什么"这个问题的理解够不够深。