1. 为什么选这个题目复现:航天器末端追逃博弈的真实复杂度
先说结论:这篇论文的复现难度,比它题目看起来的样子要高出至少一个量级。我一开始以为只要把不完全信息博弈的数学公式搬到 Matlab 里,调参跑通就完事了,真正动手之后才发现,EKF 参数估计、Epsilon 纳什均衡、末端追逃这三件事单独拎出来都不算难,但把它们揉进同一个闭环框架里,每个环节都会互相干扰,稍不留神仿真直接发散。
航天器末端追逃博弈指的是追击方与逃逸方在相对距离已经很近、剩余时间很短的情况下,各自采取机动策略争夺最终拦截或逃逸机会的对抗问题。末端阶段的特殊性在于:时间窗口极短,机动能力有限,初始相对状态误差被放大,而且双方都很难完全掌握对方的真实机动参数,比如推力大小、质量消耗率、导引逻辑切换阈值等。这种场景下,传统完全信息博弈的假设基本不成立,因为对方不会把自己的底牌摊开给你看,你用理想的全局纳什均衡策略去执行,大概率会被对方的实际非理性机动带偏。
这篇论文之所以值得复现,是因为它把问题拆成了两半:一半靠 EKF 在线估计对方的关键参数,另一半靠自适应博弈策略把估计结果实时转成控制指令。这其实是工程上非常自然的思路——先观测,再决策,再滚动优化。很多做博弈控制的人容易犯一个毛病,就是假设双方信息完全对称,直接把最优解算出来一次性执行,这在实际航天任务里几乎不可行。不完全信息 + Epsilon 纳什均衡的组合,恰恰是在回答一个工程者最关心的问题:我拿到的信息不完整,那我的策略该有多接近最优,损失才可接受?
我复现这个项目大约花了两周,其中有三天时间几乎全部耗在 EKF 的噪声协方差调参上。后面我会把踩过的坑原原本本写出来,下面先从博弈建模讲起,因为建模不对,后面代码再漂亮也是白搭。
这篇内容适合两类读者:一类是正在做航天器集群导航、拦截对抗方向研究的学生或工程师,另一类是对博弈论与控制结合有浓厚兴趣、想看看 Epsilon 纳什均衡在实际系统里到底怎么落地的控制开发者。不需要你提前精通微分对策,但最好对状态估计有一定的概念,否则到 EKF 部分会稍微吃力。
2. 不完全信息博弈建模与 Epsilon 纳什均衡的引入逻辑
2.1 从完全信息到不完全信息:均衡定义发生了什么变化
在标准的二人零和追逃博弈里,我们通常假设双方知道彼此的状态转移方程、控制约束、代价函数,也就是说双方共享同一个“公共信息库”。这时求纳什均衡就是找一个策略对,使得双方单方面偏离都无法改善自己的收益。但航天器末端追逃的实际情况是,EKF 估计出来的对方参数本身就是有误差的,对方也未必采用理论最优策略,信息的“不完全”体现在两层:一是状态观测噪声,二是对方模型参数未知。
一旦信息不完全,严格纳什均衡往往不再存在,或者说即使存在,你也不知道对方在用什么信息集做决策。Epsilon 纳什均衡解决的就是这个尴尬处境:它允许每个参与方在偏离自己均衡策略时,最多只能获得不超过 ε 的额外收益。换句话说,只要我算出来的策略在 ε 范围内是最优的,就足够工程使用,我根本不需要追求那个在完全信息假设下才成立的精确均衡点。
这里有一个非常关键的直觉:ε 不是一个数学装饰,它直接对应了你对信息不确定性的容忍程度。EKF 给出来的估计方差越大,ε 就应该设得越大,否则你会在自己都没把握的状态下强行追求过高的策略精度,结果往往得不偿失。我在复现时把 ε 与估计误差的协方差迹做了线性映射,效果比固定 ε 好得多,这一点后面还会细说。
2.2 博弈模型的数学设定:状态、控制、代价函数
我采用的模型是经典的相对运动描述,把追逃双方的相对位置和相对速度作为主状态向量,控制量是各自施加在自身平台上的推力加速度。为了不引入过重的非线性负担,我选择了线性化的相对运动方程作为基础,在这个基础上把对方的未知机动加速度建模为带随机游走的扰动项。这个扰动项就是 EKF 需要在线估计的参数之一。
代价函数采用终端型结构:追击方希望末端时刻相对距离尽可能小,逃逸方希望尽可能大。同时双方都需要付出控制能量代价,因此这是一个典型的两边都有控制代价的线性二次型微分对策。如果把论文里的完整代价方程展开,你会看到三个权重矩阵:状态末端权重、追击方控制权重、逃逸方控制权重。这三个权重一旦确定,均衡策略的形式就基本决定了,后面 EKF 估计出的参数只会去更新对方那部分的等效控制能力,而不是去改整体代价结构。
策略空间的设定同样值得注意:我假设追击方和逃逸方都采用闭环状态反馈形式,也就是说策略是当前相对状态的函数,而不是开环的时间函数。这个假设在末端博弈里是合理的,因为双方都会根据当前观测到的相对态势实时修正机动。开环策略在信息不完全时几乎没有生存能力,你无法预先精确预测对方的未来轨迹,所以闭环是唯一现实的选择。
2.3 为什么用 Epsilon 均衡而不是鲁棒博弈或简单启发式
有人可能会问,既然信息不完全,为什么不用鲁棒博弈?鲁棒博弈追求的是最坏情况下的最优表现,但它会把问题做得很保守,因为航天器末端机动能量本来就很紧张,为极低概率的最坏情况预留巨额控制余量,实战中反而容易让追击方丧失拦截窗口。Epsilon 纳什均衡给出的是一种“近似最优但不过度保守”的中间地带。
与启发式策略(比如单纯的比例导引加随机扰动的逃离策略)相比,基于均衡求解的策略有一个结构性优势:它能显式地考虑对方对自己策略的反应。比例导引只盯着相对视线转率,根本不考虑逃逸方会针对你的拦截逻辑去做对抗性机动,一旦对手策略性强,这种导弹级导引律很容易被大过载规避动作骗过去。均衡策略把“对方会如何应对”直接内建在求解过程里,这才是博弈论方法的核心价值。
我在复现中把 Epsilon 均衡作为一个可选求解开关,与固定导引策略做了对比仿真。在末端初始距离 20 公里、追击方推力加速度上限 1 个重力加速度、逃逸方机动能力约为追击方 0.7 倍的一组工况下,Epsilon 均衡策略的平均脱靶量比比例导引缩小了大约 38%,代价是追击方的控制能耗提高了约 15%。这说明博弈策略并不是免费的午餐,你不可能在节能和拦截精度上同时占优,必须根据任务优先级做权衡。
3. EKF 参数估计的实现:状态-参数联合估计的核心步骤
3.1 为什么要做联合估计:状态与未知参数深度耦合
末端追逃中,追击方能够直接测量的通常是相对距离和相对视线角,速度信息往往要通过滤波器间接获取。更复杂的是,逃逸方的机动能力并不是恒定值,它与燃料消耗、发动机工作状态、当前过载限制都有关,而这些参数你不可能直接测出来。我最初尝试分两步走:先用 EKF 滤波相对状态,再单独用最小二乘离线辨识逃逸方参数。两步走的问题在于,状态误差会直接污染参数辨识结果,而参数辨识误差又会反馈到下一步的状态预测里,形成恶性循环。
联合估计的思路是把未知参数直接增广到状态向量里面去,让滤波器同时估计状态和参数。这样做的好处是,状态预测时用到的动力学方程里就带上了当前时刻的参数估计,预测一步之后用测量更新,观测量同时修正状态和参数,两条误差通道在滤波器内部自然耦合,不需要你人为协调。代价是状态维度上升,Jacobian 矩阵的计算更复杂,滤波发散的风险也随之增加。
我在实现时选择把逃逸方等效机动加速度的噪声强度作为慢时变参数,用随机游走模型描述它的变化,也就是说每个时刻的参数估计值等于上一时刻值加一个高斯白噪声增量。随机游走的标准差要取得很小,否则参数估计会剧烈跳动,把滤波器的状态估计彻底带偏。这个值我最终取的是 1e-4 量级(单位与状态单位一致),具体到你的项目里需要根据相对距离量纲重新标定。
3.2 增广状态建模与 EKF 递推公式设计
状态向量我定义为八维:六个相对运动状态(相对位置三个分量、相对速度三个分量),外加两个未知参数。未知参数分别是逃逸方在追踪平面内的机动加速度基线值,以及逃逸方机动噪声的比例系数。为什么选这两个参数?因为它们直接决定了代价函数里逃逸方的控制权重等效值,而 Epsilon 均衡策略对控制权重的变化非常敏感。
EKF 的标准递推我也就不再复述教科书内容了,直接说工程实现里比较容易被忽略的三件事。第一,Jacobian 矩阵千万不要图省事用数值差分去近似,解析 Jacobian 虽然推导麻烦一点,但数值差分在状态维度高、步长不匹配时很容易引入额外的截断误差,导致滤波器收敛速度极慢。第二,状态增广之后,过程噪声协方差矩阵变成分块对角结构,参数部分的噪声要单独一个小块,这个块如果给得太大,参数估计方差会虚高,Epsilon 均衡的 ε 界就会被撑得很大,策略会变得过于保守。第三,测量更新里我建议用 Joseph 形式的协方差更新,虽然计算量略大,但是能保证协方差矩阵始终保持半正定,数值稳定性比标准形式好得多。
下面这段 Matlab 代码是我在实际复现时用的 EKF 核心骨架,注释里包含了我调参时踩过的关键点:
function [x_est, P_est] = ekf_predict_update(x_est, P_est, z, dt, Q, R) % x_est: 增广状态 [rx ry rz vx vy vz a_evade eta] % 先做预测 [x_pred, Phi] = dynamics_discrete(x_est, dt); % Phi 为状态转移雅可比 P_pred = Phi * P_est * Phi' + Q; % 测量矩阵:这里假设直接测量相对位置 H = zeros(3, 8); H(1,1) = 1; H(2,2) = 1; H(3,3) = 1; S = H * P_pred * H' + R; K = P_pred * H' / S; % 测量更新,使用 Joseph 形式保证稳定性 I_KH = eye(8) - K * H; P_est = I_KH * P_pred * I_KH' + K * R * K'; x_est = x_pred + K * (z - H * x_pred); end注意上面代码里dynamics_discrete必须要在积分相对运动方程的同时把状态转移矩阵的雅可比一起算出来,我推荐直接写解析式而不是依赖自动微分,因为 Matlab 的符号工具箱在循环仿真里每次调用开销太大,两万步仿真下来性能差距非常明显。
3.3 噪声协方差调参与数值稳定性处理
EKF 发散的头号原因不是公式错,而是 Q 和 R 矩阵的量纲没对齐。航天器末端追逃场景里,相对位置单位如果是公里,相对速度单位如果是公里每秒,那么 Q 矩阵里位置噪声和速度噪声的量级可能相差 10 的六次方,这会让滤波器的增益矩阵 K 直接失真。我采用的方案是仿真开始前对全部状态做无量纲化处理,把相对距离归一到 10 公里量级,速度归一到 1 公里/秒量级,参数归一到对应机动加速度的量级,然后再设定 Q 和 R。
还有一个坑是测量更新频率和动力学积分步长不一致。我一开始用 100 Hz 做动力学仿真,但是测量数据只在 10 Hz 时给出,这就意味着 EKF 预测十步才做一次更新。预测步数太多,协方差会不断膨胀,等到更新时卡尔曼增益会异常大,一次测量就把状态拉到错误的区域。后来我改成测量更新之前先做协方差裁剪,限制每一步预测后协方差对角线最大值,否则滤波输出的位置误差曲线会出现明显的锯齿状抖动。
调参顺序也有讲究:先把 R 固定在一个合理的传感器噪声水平,然后只调 Q 的整体缩放系数;等位置估计误差收敛之后,再把参数部分的随机游走噪声单独加进去。千万不要一上来就同时调六个矩阵参数,你根本分不清发散是哪个噪声引起的。我最后确定的 Q 缩放系数是 0.8,R 的对角线取位置测量方差 0.01 平方公里,参数随机游走方差取 1e-4,跑完蒙特卡洛后位置均方根误差大约稳定在初始相对距离的 1% 左右。
4. 自适应博弈策略设计:让均衡跟随估计结果在线滚动
4.1 参数自适应与策略自适应的区别
拿到 EKF 给出的参数估计之后,怎么把它转化到博弈策略里?这里存在两种自适应层次。第一种是参数自适应:估计出的逃逸方机动能力直接替换到代价函数里的等效控制权重,然后重新求解纳什均衡,这种做法的前提是博弈问题本身能够快速求解,否则策略更新频率跟不上参数变化速度。第二种是策略自适应:不直接改代价函数,而是定期比较当前策略与估计得到的“最优应对策略”之间的偏差,用梯度下降或迭代方法逐步修正策略,这种做法的收敛性更平滑,但可能在对抗过程中落后半拍。
我在复现时两种都试过,最终选的是参数自适应为主、策略自适应为辅的混合结构。主结构是每个博弈刷新周期(仿真步长 0.1 秒)根据 EKF 最新参数重新求解一次均衡策略,求解过程用线性二次型微分对策的代数 Riccati 方程快速完成,耗时在毫秒级,完全满足实时性。辅助结构是如果参数估计变化足够小(小于阈值),就沿用上一周期的策略,避免策略抖动导致控制量高频切换。
4.2 基于估计值的滚动分步策略求解
滚动求解的核心是把末端追逃问题变成一个有限时域开环最优控制问题,但是用闭环状态反馈形式表达。我设定博弈刷新周期为 2 秒,每个周期内双方都按照当前时刻估计出的对方参数,求解未来 2 秒的最优反馈增益,然后只执行第一个控制步,下一个周期再重新估计、重新求解。这样做的好处是,EKF 的估计误差不会在一个策略上累积太久,每次滚动都会用最新信息修正偏差。
用代数 Riccati 方程求解线性二次型微分对策时,需要的是状态方程里的控制矩阵 B1(追击方)和 B2(逃逸方)。B1 和 B2 的取值与双方质量有关,而逃逸方质量变化率是 EKF 估计出的参数之一,所以 B2 矩阵每一轮都要更新。Riccati 方程的解是三个耦合矩阵:一个与状态二次型有关,一个与追击控制项有关,一个与逃逸控制项有关。求解过程中遇到的最大问题是迭代不收敛,尤其当末端权重取值过大时。后来我改用连续时间的求解函数并在每次迭代后检查矩阵特征值是否稳定,如果不稳定就把末端权重自动降低 20%,这个技巧在论文里完全没有提到,纯属实战经验。
策略求解的核心代码骨架如下:
function K_pursue = solve_game_strategy(A, B1, B2, Q_final, R1, R2, t_go, epsilon) % 基于 EKF 的参数构造代价矩阵 % 简化的线性二次型微分对策求解 P = Q_final; % 终端权重矩阵 dt = 0.01; for t = dt:dt:t_go % 反向积分 Riccati 微分方程 P_dot = A'*P + P*A + epsilon*eye(size(A)) ... - P*B1*(R1\B1')*P + P*B2*(R2\B2')*P; P = P - P_dot * dt; % 检查是否出现特征值显著增大的情况 if max(abs(eig(P))) > 1e8 Q_final = Q_final * 0.8; P = Q_final; end end K_pursue = R1 \ (B1' * P); % 追击方最优反馈增益 end注意这里我人为加入了一个epsilon项到 Riccati 微分方程里,这其实是 Epsilon 纳什均衡在求解层面的一个工程近似,它让均衡解向“允许微小偏离最优”的方向松弛,防止增益矩阵在边界处爆炸。这项操作虽然数学上不够严谨,但仿真结果非常稳健。
4.3 控制律合成与可执行性约束
求解得到的反馈增益给出的是期望的追击方向加速度指令,但航天器执行机构有饱和约束,加速度指令不能超过推力极限。直接对加速度指令做截断会破坏博弈最优性,甚至可能引发极限环震荡。我做的处理是,如果指令加速度超过上限,就把超过的比例加到逃逸方等效机动能力上重新求解一轮,相当于认为对方也会受到同样的饱和限制。这个对称饱和思想很朴素,但效果出奇地好,拦截精度比简单截断提高了约 20%。
控制律合成时还要考虑一件事:末端追击阶段非常短,追逃双方的相对速度在末端往往已经很大,追击方如果把过多控制能量放在径向推力上,横向机动就会不足,导致最终脱靶。因此我在合成控制律之前会对终端权重矩阵做一次预缩放,让横向控制权重略大于径向,引导追击方将主要能量用在修正横向偏差上。这个细节是若干次失败仿真之后才悟出来的,论文原文只给了权重矩阵的符号形式,完全没有提实际取值规律。
4.4 收敛性与 ε 边界的选择逻辑
自适应博弈框架的收敛性依赖于 EKF 的参数估计误差有界,以及博弈刷新周期足够快。我在仿真中观察到,如果 EKF 的参数估计误差超过真实值的 15%,那么滚动求解的策略就会出现明显的来回摆动,脱靶量反而比固定参数策略还要大。这说明自适应博弈不是无条件的,它需要估计质量作为前提。
我最终把 ε 与 EKF 估计协方差的迹做了线性绑定:epsilon = k * trace(P_param),其中P_param是增广状态里参数部分的协方差块,比例系数 k 取 0.1。这样当估计不确定度上升时,均衡解的松弛程度自动加大,策略变得相对保守;当不确定度下降时,ε 减小,策略趋于精确最优。这个自适应 ε 策略是整个复现里我最满意的一处设计,也让最终仿真结果明显优于固定 ε 的版本。
5. Matlab 代码实现与模块拆解:从论文公式到可运行仿真
5.1 工程文件组织与仿真主流程
我实现时把整个项目拆成了五个核心文件:主仿真脚本、相对运动动力学函数、EKF 滤波器函数、博弈策略求解函数、以及结果可视化脚本。主仿真脚本负责初始化所有参数、循环推进时间、统计脱靶量和能耗,它本身不要写太长的代码,尽量把所有逻辑封装到函数里,这样你后续改参数、换观测模型都只动一行调用。
主循环结构如下:
for t = 0:dt_sim:T_final % 更新逃逸方真实机动(人为设定真实参数) u_evader = true_evader_policy(state_true, t); % 测量生成 z = state_true(1:3) + sigma_R * randn(3,1); % EKF 估计 [state_est, P_est] = ekf_predict_update(state_est, P_est, z, dt, Q, R); % 自适应博弈策略求解 K_pursue = solve_game_strategy(A_est, B1, B2_est, Q_final, R1, R2, t_go, epsilon_adpt); u_pursue = -K_pursue * state_est(1:6); % 真实动力学推进 state_true = dynamics_true(state_true, u_pursue, u_evader, dt); end这个流程看着简单,但要注意t_go是剩余博弈时间,它会随着仿真推进不断变小,这是末端追逃的一个重要特征。如果直接把整个仿真时间当作博弈时域,最后一段控制律会因为时域过长而缺乏末端收敛压力,脱靶量会明显偏大。
5.2 相对运动动力学模块的搭建
相对运动动力学我采用了 Clohessy-Wiltshire 方程作为基础,但增加了一个非线性修正项来模拟末端近距离时引力差的影响。这个修正项表达式并不复杂,但它的 Jacobian 推导非常容易出错,我在初次实现时因为少了一个叉乘项,导致 EKF 在轨道高度 500 公里左右时位置估计误差突然从 1% 跳到 15%。建议你在写动力学函数时,用有限差分去验证解析 Jacobian 的正确性,至少在离线测试阶段要这样做。
动力学函数的主输入是相对状态和两个控制量,输出是状态导数和状态转移雅可比。我还额外加了一个真实参数与估计参数分离的设计,也就是说真实动力学使用的是隐藏的逃逸方真实机动参数,而 EKF 内部使用的是估计参数,这样可以模拟现实中最常见的模型失配。很多复现代码把真实模型和估计模型写成了同一个函数,这是非常严重的错误,因为自欺欺人的仿真会高估算法性能,到实际工程里立刻失效。
5.3 策略求解模块的稳定性处理
策略求解模块最容易出问题的是 Riccati 方程反向积分的步长选择。我在试的时候,步长取 0.05 秒就会出现增益矩阵震荡,取 0.01 秒才能稳定,但计算量直接翻了五倍。后来我采用自适应步长:先大步长探测,如果协方差矩阵在两步之间变化超过 5%,就自动缩小步长重新回溯。这个技巧让策略求解时间平均压到了 3.5 毫秒,对 0.1 秒的博弈刷新周期完全够用。
另外一个实用小技巧是在反馈增益矩阵 K 上做低通滤波。即使 EKF 和函数求解都稳定,相邻两个周期的 K 值仍可能因为参数估计的微小扰动而出现跳变。我在两个周期之间对 K 做了一次指数平滑,平滑系数取 0.3。这样控制加速度指令的频谱更干净,也避免触发结构共振。这个在论文源码里几乎不可能看到,但实际做控制系统的人都不会告诉你。
5.4 蒙特卡洛打靶实验的设计
复现这类论文,单次仿真的结果不能说明任何问题,必须有蒙特卡洛统计。我做的是 500 次独立打靶,每次打靶随机改变初始相对位置误差、传感器噪声种子、逃逸方真实机动能力初值。统计指标选择了两个:平均脱靶量和 95% 分位脱靶量,后者比平均值更能反映算法在最不利情况下的稳定性。
蒙特卡洛仿真跑 500 次大概需要三个小时,期间我观察到随着样本增加,平均脱靶量的波动会逐渐变小,但 95% 分位脱靶量偶尔会出现个别离群值,究其原因都是参数估计在某一小段时间内突然跳变。后来我在 EKF 里加了一个标准化残差检验门限,残差超过三倍标准差时就不更新参数,只更新状态,离群值数量大幅下降,95% 分位脱靶量改善了约 30%。
6. 复现期刊论文的踩坑清单与验证心得
6.1 参数不匹配导致 EKF 发散:噪声模型陷阱
我花了最长时间解决的一个问题是,EKF 在 2 秒之后开始发散,位置估计误差由 1% 左右直接爆炸到无法使用。排查过程是把每一条状态曲线单独画出来,结果发现逃逸方参数估计在 1.5 秒处出现一个尖峰,参数瞬间跳变到真实值的三倍,从而带偏所有状态。根因在于我将参数随机游走噪声设置得过大,且 R 矩阵又被低估,导致增益太高,一次异常测量就能把参数打飞。
解决办法是把参数随机游走噪声方差从 1e-3 调低到 1e-4,并且引入限幅机制,让参数估计值限制在物理合理范围之内,比如逃逸方机动加速度不可能大于它推重比决定的极限值。限幅看似简单,但在 EKF 中实现时要小心,你不能直接截断状态后又不管协方差,正确做法是对超出范围的参数,相应地把协方差的对应行列也置成一个极小值,迫使滤波器在下一次更新时以测量为准重新收敛。
6.2 均衡策略与动力学约束冲突:控制饱和问题
自适应博弈策略在理论上假设控制无上限,但航天器推力加速度一定有限,早期的仿真里追击方指令加速度频繁超过设定上限,直接对方学里的状态造成剧烈震荡,甚至出现追逃双方相对距离在末端不降反升的反常现象。我最初的想法很简单,就是截断,但截断后策略的均衡性被破坏,脱靶量比不截断还大。
后来我采用前文说过的对称饱和思路,把追击方控制饱和产生的“能力损失”折算到对方的等效控制权重,相当于在每一轮策略求解时让双方的控制上限一致,这样截断后的策略依然保留了均衡结构。仿真结果证实,脱靶量从截断法的 320 米降到了 85 米,这个改进是非常显著的。如果你的场景里执行机构饱和也很严重,建议优先考虑这种思路,不要硬扛。
6.3 仿真步长与事件触发时机的取舍
末端追逃有个特殊之处:剩余时间小于 2 秒以后,博弈刷新周期需要自适应地缩短,否则策略长时间不更新,会有半秒以上的决策延迟,这个时间足够逃逸方做一次大幅机动躲开拦截窗口。我在 t_go 大于 5 秒时使用 0.5 秒的刷新周期,t_go 在 2 到 5 秒之间刷新周期设为 0.2 秒,t_go 小于 2 秒就改成 0.05 秒,形成一个简单的事件触发机制。
这个设计的理由很简单:末端越接近,动态变化越快,你的决策必须跟上。但也要注意刷新周期缩短会显著增加计算量,尤其是策略求解模块。我在最后一个 t_go 阶段把 Riccati 方程反向积分的时域缩短到剩余时间本身,并且引入一个早停条件,当增益矩阵的范数变化率连续三步小于 1% 时就停止迭代,节省了大约 40% 的计算时间。
6.4 最终验证:如何判断复现是否成功
复现期刊论文,最难回答的问题是“我怎么知道自己复现对了”。我的做法分三步:第一步,先关闭不完全信息,把 EKF 换成真值,直接求解完全信息纳什均衡,确认这个基准策略的脱靶量低于所有自适应策略,否则说明我的均衡求解模块本身就错了。第二步,把 EKF 的噪声调小到几乎为零,此时自适应策略的脱靶量应当逼近完全信息基准,这一步验证了自适应框架的一致性。第三步,再恢复到正常噪声和模型失配,观察脱靶量的增长是否在可接受范围内。
按这个流程跑下来,我最终得到的一组典型蒙特卡洛结果如下表所示:
| 策略类型 | 平均脱靶量 (m) | 95%分位脱靶量 (m) | 追击控制能耗 (相对值) |
|---|---|---|---|
| 完全信息基准 | 52 | 118 | 1.00 |
| 自适应博弈(正常噪声) | 74 | 158 | 1.13 |
| 固定参数博弈 | 96 | 214 | 1.05 |
| 比例导引 | 121 | 268 | 0.89 |
表格说明自适应博弈在信息不完全时付出约 13% 的能耗代价,换来比固定参数博弈低 22 米的平均脱靶量,我认为这个代价是值得的,因为末端拦截场景里每缩短一米脱靶量都可能是任务成败的关键。至于与论文原文数据的对比,我只能说量级一致,但具体数字没法完全吻合,毕竟仿真初值、噪声模型和权重矩阵没有公开得那么细致,这属于期刊复现的正常现象。
我在这个项目里最深的体会是,复现一篇博弈控制论文,真正难的不是数学推导,而是把估计、博弈、控制三条误差链路拧在一起时的工程调参。如果你也想跑类似的复现,建议先拿完全信息基准把动力学和策略模块验证扎实,再逐步引入 EKF 和自适应机制,不要一步到位,否则一旦发散你根本不知道该调哪个模块。后来我又在这个框架上尝试加入视线角约束和多追击者协同,虽然还没有完全跑通,但踩过的坑一定会比这次少得多。