模糊逻辑与自适应奖励塑形:提升无人机强化学习鲁棒性的工程实践
1. 项目概述:当无人机竞速遇上“模糊”的智慧
最近在折腾一个挺有意思的项目,核心就一句话:用模糊逻辑去自适应地调整强化学习的奖励函数,目标是让无人机在竞速这种充满不确定性的环境里飞得更稳、更“聪明”。这听起来有点绕,但拆开来看,其实是我们面对一个经典难题时的一次“组合拳”尝试。
无人机竞速,尤其是第一人称视角(FPV)竞速,对控制算法的要求极其苛刻。赛道复杂,有急弯、窄门、起伏地形;环境多变,存在气流扰动、传感器噪声、甚至电池电压下降带来的动力衰减。传统的、基于精确模型的控制器在这里常常“水土不服”,因为现实世界永远比数学模型更“模糊”。于是,深度强化学习(DRL)成了热门选择,它能让无人机通过与环境的交互,自己学会一套高超的飞行策略,甚至超越人类飞手。
但DRL在无人机竞速上有个“阿喀琉斯之踵”:奖励函数的设计。奖励函数就像教小孩的“小红花”规则,你告诉算法什么行为是好的(给正奖励),什么是不好的(给负奖励)。在竞速场景下,我们通常希望无人机飞得快、飞得准(穿过门)、飞得稳(不撞墙)。一个简单的奖励函数可能是:奖励 = 速度奖励 + 穿门奖励 - 碰撞惩罚。
问题来了。在训练初期,无人机像个蹒跚学步的婴儿,速度很慢,几乎穿不过门,还总撞墙。如果碰撞惩罚设置得稍重,它可能因为害怕惩罚而彻底“躺平”,停在起点不动——因为不动就不会撞,虽然没奖励,但也没惩罚,这在算法看来是个“安全”的局部最优解。这就是所谓的稀疏奖励和奖励欺骗问题。反之,如果过于强调速度,它可能会为了追求速度而疯狂乱撞,根本学不会精细的穿门技巧。
所以,我们需要一个能“因材施教”、“动态调整”的奖励机制。这就是“自适应奖励塑形”要干的事。而“模糊逻辑”,就是我们实现这种自适应性的“大脑”。它不依赖非黑即白的精确判断(比如“速度大于10m/s就给奖励”),而是模仿人类经验,处理“有点快”、“比较稳”、“快要撞了”这种模糊概念,然后输出一个平滑、合理的奖励调整量。这个项目的核心,就是把模糊逻辑控制器作为奖励函数的“调节器”,让奖励能根据无人机当前的状态(如距离障碍物的远近、速度与理想值的偏差、航向角的稳定度)进行实时、柔性的调整,从而引导智能体更鲁棒、更高效地学习。
简单说,我们不是在写死一套奖励规则,而是教系统一套“奖励的哲学”,让它能根据实际情况,智能地决定此刻是该鼓励“勇往直前”,还是该提醒“小心谨慎”。最终目标,是让无人机在仿真和现实中,面对各种扰动时,都能表现出强大的适应性和稳定性,也就是标题里说的——提升鲁棒性。
2. 核心思路拆解:为什么是模糊逻辑+自适应奖励塑形?
要理解这个组合为什么有效,我们需要先深入看看它们各自解决了什么问题,以及合体后产生的化学反应。
2.1 强化学习在无人机竞速中的固有挑战
无人机竞速对强化学习智能体而言,是一个典型的部分可观测、高动态、连续控制的问题。
- 部分可观测:无人机上的传感器(如IMU、摄像头)提供的状态信息是带有噪声且不完整的,它无法像上帝视角一样知道全局精确信息。
- 高动态:竞速要求毫秒级的反应和决策,动作空间(电机油门)是连续的,且动力学模型非线性强。
- 稀疏与延迟奖励:只有成功穿过一个门才有较大的正奖励,最终完成一圈或比赛才有结束奖励。在长达数秒的飞行过程中,大部分时间智能体得不到任何“反馈”,不知道自己的操作是在靠近目标还是在远离目标,学习效率极低。
传统的奖励塑形(Reward Shaping)通过添加一些中间奖励(比如距离门越近给点小奖励)来缓解稀疏性问题。但这引入了新问题:如何设计这些中间奖励的权重?权重过大,智能体可能学会“骗奖励”(比如围着门转而不穿过去);权重过小,又起不到引导作用。而且,一套固定的权重无法适应训练的不同阶段(初期需要更多引导,后期需要更精确)和不同的环境状态(直线冲刺和急转弯对奖励的侧重点理应不同)。
2.2 模糊逻辑:处理不确定性的“经验主义者”
模糊逻辑的核心在于“隶属度函数”和“模糊规则”。它不关心“速度是不是精确等于15.3m/s”,而是关心“当前速度对于‘理想速度’这个概念,有多大的隶属度”。
- 输入模糊化:我们将精确的观测值(如距离障碍物的距离
d=0.5米)通过隶属度函数转化为模糊语言值。例如,可以定义“近”、“中”、“远”三个模糊集。d=0.5米可能属于“近”的隶属度为0.8,属于“中”的隶属度为0.2,属于“远”的隶属度为0.0。 - 模糊推理:基于人类专家经验制定规则库。规则通常是“IF-THEN”形式,例如:
- 规则1:IF
距离障碍物是近AND速度是高,THEN奖励调整量为大幅惩罚。 - 规则2:IF
航向角偏差是小AND对准下一个门,THEN奖励调整量为小幅奖励。
- 规则1:IF
- 解模糊化:将多条规则输出的模糊结论(“大幅惩罚”、“小幅奖励”)通过重心法等算法,聚合为一个精确的数值,作为对原始奖励函数的调整量。
它的优势在于:规则基于人类直觉,易于理解和调试;对输入噪声不敏感(因为本身处理的就是模糊概念);输出变化平滑,不会因为观测值的微小抖动导致奖励剧烈跳变,这非常有利于强化学习训练的稳定性。
2.3 自适应奖励塑形:让奖励“活”起来
自适应奖励塑形的思想是,奖励函数R(s, a, s')不再是静态的,而是一个动态函数R_adaptive(s, a, s', t, θ),其中t可能代表训练步数、回合数或当前性能,θ是可调参数。
在我们的架构中,模糊逻辑系统就是实现自适应的执行器。它的输入不仅包括当前环境状态(s),还可以包括:
- 训练进程指标:如当前回合的平均奖励、最近N步的成功率。训练初期,规则可以更倾向于给予探索性行为(如尝试新角度)以小幅奖励;训练后期,则更严格地要求精度和速度。
- 任务难度评估:如当前赛道段的弯曲程度、下一个门的朝向与当前位置的相对关系。在急弯处,系统可以自动提高“稳定性奖励”的权重,降低“速度奖励”的权重。
- 智能体实时表现:如当前速度与预设参考轨迹的跟踪误差、角速度的剧烈程度。如果智能体飞得“手忙脚乱”,系统可以施加额外的负奖励来鼓励平滑控制。
这样,奖励函数就从一个死板的“记分牌”,变成了一个能观察局势、灵活判罚的“智能教练”。这个教练的决策逻辑(模糊规则)是透明的,我们可以通过修改规则来注入不同的训练先验知识。
2.4 技术栈选型与整体架构
基于以上思路,一个典型的技术实现架构如下:
- 仿真环境:AirSim或FlightGym。它们提供高保真的无人机物理模型和丰富的传感器模拟,是强化学习训练不可或缺的沙盒。AirSim与Unreal Engine结合,能构建极其逼真的视觉赛道;FlightGym则更轻量,专注于动力学仿真。
- 强化学习算法:近端策略优化(PPO)或软演员-评论家(SAC)。PPO在实践中的稳定性和调参友好性使其成为首选;SAC作为离线策略算法,样本效率可能更高,但训练更复杂。对于连续动作空间的无人机控制,两者都是经过验证的选择。
- 模糊逻辑库:scikit-fuzzy(Python)。这是一个轻量级、易上手的库,方便我们定义隶属度函数、构建规则库并进行推理计算。
- 神经网络框架:PyTorch。其动态图特性在研究和原型阶段调试更为灵活。
整体工作流程:
- 步骤1:在每个时间步,智能体从环境获取状态
s_t。 - 步骤2:状态
s_t和额外的上下文信息(如训练阶段、赛道段ID)一同输入到模糊逻辑奖励调节器。 - 步骤3:模糊调节器根据内置规则库,计算出一个实时的奖励调整量
Δr_t。 - 步骤4:基础奖励函数
R_basic(s_t, a_t, s_{t+1})(计算速度、穿门、碰撞等)与调整量Δr_t相加,得到最终奖励R_final = R_basic + Δr_t。 - 步骤5:
R_final被送回给PPO/SAC算法,用于更新策略网络和价值网络。 - 步骤6:随着训练进行,可以定期根据智能体的整体表现(如平均圈速、穿门成功率),对模糊规则中的部分参数(如隶属度函数的中心点)进行微调,实现更长周期的自适应。
注意:模糊逻辑调节器本身不通过梯度下降学习,它的知识来自我们预设的规则。它的作用是提供一个稳定、可解释的奖励引导机制。策略网络才是通过学习来内化这种引导,最终学会在复杂环境下自主飞行。
3. 核心模块实现与参数设计
纸上谈兵终觉浅,我们来具体看看几个核心模块如何实现,以及那些关键的参数和规则是怎么定下来的。这里我分享一套经过实际调试验证、相对通用的设计思路。
3.1 状态空间与模糊化设计
状态信息是决策的基础。我们通常从仿真环境中获取以下核心观测值,作为模糊系统的输入:
到最近障碍物的最小距离 (
d_min):通过机载虚拟激光雷达或碰撞检测获得。这是安全性的核心指标。- 模糊集定义:
{非常近, 近, 安全, 远} - 隶属度函数选择:采用梯形或三角形函数。例如,“非常近”可以是0到0.3米的梯形函数,当距离小于0.1米时隶属度为1,在0.1-0.3米之间线性下降到0。
- 设计心得:“安全”区间的范围要足够宽,确保无人机在正常飞行时大部分时间落在这个区间,避免系统过于敏感。我通常将“安全”设置为0.5米到3米。
- 模糊集定义:
速度与参考速度的偏差 (
v_error):我们为赛道不同段落预设一个参考速度v_ref(比如直线段15m/s,弯道8m/s)。v_error = v_current - v_ref。- 模糊集定义:
{过慢, 稍慢, 合适, 稍快, 过快} - 设计心得:偏差的容忍度需要不对称。对于竞速,
稍快的惩罚可以比稍慢轻一些,以鼓励积极飞行。但过快必须严厉惩罚,以防失控。
- 模糊集定义:
航向角与目标方向夹角 (
yaw_error):无人机机头指向与下一个门中心方向的夹角。- 模糊集定义:
{大偏左, 小偏左, 对准, 小偏右, 大偏右} - 设计心得:这个误差的模糊化需要结合距离。距离门很远时,允许的航向误差可以大一些;距离门很近时,必须要求“对准”。
- 模糊集定义:
角速度大小 (
omega):机体旋转的角速度模长。这是衡量飞行“粗暴”还是“平滑”的关键指标。- 模糊集定义:
{平滑, 适中, 剧烈} - 设计心得:一个平滑的飞行轨迹不仅好看,也意味着更低的能量损耗和更高的控制精度。对“剧烈”的角速度施加持续的小额负奖励,能有效鼓励智能体学习出更柔顺的控制策略。
- 模糊集定义:
3.2 模糊规则库构建实例
规则库是模糊逻辑的“灵魂”。下面列举一些核心规则,展示如何将人类飞行经验编码进去。规则格式为:IF (条件) THEN (奖励调整量)。
规则组A:安全性优先(防撞)
- R1: IF
d_min是非常近THENΔr为极大惩罚(如 -10) - R2: IF
d_min是近ANDv_error是正(过快) THENΔr为大惩罚(如 -5) - R3: IF
d_min是近ANDomega是剧烈THENΔr为中惩罚(如 -3)
规则组B:效率与速度引导
- R4: IF
d_min是安全OR远ANDv_error是稍慢THENΔr为小奖励(如 +0.5) - R5: IF
yaw_error是对准ANDv_error是合适THENΔr为中奖励(如 +2) - R6: IF
v_error是过慢THENΔr为小惩罚(如 -0.2)【此规则在训练后期启用】
规则组C:飞行品质优化
- R7: IF
omega是平滑THENΔr为微小奖励(如 +0.1)【持续鼓励】 - R8: IF
omega是剧烈THENΔr为微小惩罚(如 -0.1)【持续抑制】
规则激活与权重:所有被激活的规则(即条件部分隶属度>0的规则)其结论都会以一定的强度(由条件隶属度的乘积或最小值决定)被触发。最终的解模糊化步骤(如重心法)会综合所有被触发的结论,输出一个精确的Δr。
实操心得:规则库不是一蹴而就的。我的建议是从简开始,迭代增加。初期只实现最核心的防撞规则(组A)和最基本的穿门奖励。先让智能体能安全地飞起来并完成赛道。然后逐步加入速度引导(组B)和飞行品质规则(组C)。每增加一组规则,都要观察训练曲线,确保学习过程依然稳定。规则的惩罚/奖励数值需要反复调整,一个原则是:安全性惩罚 >> 效率性奖励 >> 品质性奖励。确保智能体在任何时候都将安全置于首位。
3.3 自适应机制的具体实现
如何让“自适应”落地?这里提供两种可操作的策略:
策略一:基于训练阶段的参数调度在训练脚本中维护一个phase变量,根据总训练步数或最近100回合的平均得分来划分阶段(如探索期、稳定期、优化期)。
# 伪代码示例 if phase == “exploration”: # 放宽速度要求,降低“过慢”的惩罚,鼓励探索 rule_R6["penalty"] = -0.05 # 很轻的惩罚 elif phase == “optimization”: # 收紧要求,提高对速度和精度的奖励权重 rule_R5["reward"] = +3.0 rule_R6["penalty"] = -1.0 # 较强的惩罚,迫使提速通过动态修改规则库字典中的参数,实现奖励侧重点的迁移。
策略二:基于局部环境的风险评估在进入一个赛道区域前(可通过预先设置的航点或实时识别),评估该区域的难度系数risk_factor(例如,根据曲率计算)。
# 伪代码示例:在急弯区域 risk_factor = calculate_curvature(next_gate) if risk_factor > threshold: # 临时修改与安全相关的规则权重 temporarily_boost_rule(R2) # 更严厉地惩罚“近且快” temporarily_suppress_rule(R4) # 暂时降低对“稍慢”的奖励这种方法能让奖励函数具备一定的“前瞻性”,更符合人类飞手的决策逻辑——看到急弯提前减速。
4. 训练流程、调参与实战记录
有了清晰的架构和模块设计,接下来就是漫长的训练和调参过程。这部分充满了“玄学”和“体力活”,我将分享一套系统性的流程和踩过的坑。
4.1 训练流程分步解析
第一阶段:基准训练(1-2天)
- 目标:不使用模糊逻辑奖励塑形,仅用最基础的稀疏奖励(如:穿门+10,碰撞-10,完成一圈+100)训练一个基准模型。
- 目的:1) 验证仿真环境、RL算法管道是否正常工作;2) 获得一个性能底线,用于后续对比;3) 通常这个模型很难学会完整赛道,但它能揭示最初始的探索难点在哪里。
- 关键参数:PPO的
learning_rate可以设得稍高(如3e-4),clip_range用默认值0.2。折扣因子gamma建议设高一些(0.99),因为竞速任务的奖励延迟较长。
第二阶段:引入静态模糊奖励塑形(3-5天)
- 目标:接入设计好的模糊逻辑奖励调节器,但关闭自适应功能(所有参数固定)。使用第3.2节中的完整规则库。
- 目的:观察在“智能”奖励引导下,智能体的学习曲线是否变得更平滑、更快收敛。此阶段重点调试规则库本身的合理性。
- 监控指标:
- 回合奖励:应该呈现稳定上升趋势,波动比第一阶段小。
- 平均步数/回合:随着智能体学会飞得更远,这个值会增长。
- 关键事件频率:记录每回合的穿门数、碰撞次数。理想情况是穿门数稳步上升,碰撞次数下降并稳定在一个低水平。
- 调参焦点:反复调整规则中的奖励/惩罚数值。如果智能体变得过于保守(总在起点徘徊),降低碰撞惩罚或提高探索奖励。如果智能体横冲直撞,则加强安全规则。
第三阶段:启用自适应机制(5-7天以上)
- 目标:逐步打开基于训练阶段或环境风险评估的自适应机制。
- 目的:让智能体在训练后期能突破性能瓶颈,学习更精细、更激进(但安全)的策略。
- 操作:按照3.3节的策略,在代码中实现
phase的判断或risk_factor的计算,并让它们影响规则参数。 - 挑战:自适应机制可能引入不稳定性。需要非常小心地设计切换逻辑和参数变化幅度。强烈建议使用线性插值或平滑函数来改变参数,避免跳变。例如,
penalty = linear_interpolate(start_epoch, end_epoch, current_epoch, penalty_low, penalty_high)。
第四阶段:鲁棒性压力测试(1-2天)
- 目标:在训练好的模型上,引入扰动进行测试。
- 测试内容:
- 动力学参数扰动:在仿真中随机改变无人机的质量、惯性矩、电机推力系数(±10%)。
- 环境扰动:加入持续或阵风。
- 传感器噪声:为状态观测添加高斯噪声。
- 部分状态缺失:模拟GPS信号丢失,只依赖IMU和视觉。
- 目的:对比基准模型和我们的模糊自适应模型在扰动下的性能衰减程度。鲁棒性强的模型,其完成赛道的成功率下降应显著小于基准模型。
4.2 关键超参数调优心得
除了RL算法本身的超参,本项目有几个特有的关键参数需要精心调整:
奖励缩放因子 (
reward_scale):模糊逻辑输出的Δr和基础奖励R_basic可能量纲不同。需要一个缩放因子λ来平衡:R_final = R_basic + λ * Δr。λ太大,模糊规则会主导学习,可能掩盖了最终任务目标(完赛);λ太小,则塑形效果微弱。我的经验是从一个较小的值开始(如0.1),根据训练初期智能体是否表现出预期的行为倾向(如远离墙壁)来调整。模糊规则触发阈值:可以设置一个阈值,只有当某个规则的条件综合隶属度超过该阈值时,该规则才被激活。这可以防止大量无关紧要的规则在边界情况下产生微弱的、可能相互矛盾的输出,从而降低系统噪声。通常设置为0.1到0.3之间。
自适应切换的时机:何时从“探索期”切换到“优化期”?不能简单地按固定回合数划分。一个可靠的指标是看滑动平均回合奖励是否进入平台期。例如,连续200个回合的平均奖励增长低于1%,则可以认为当前阶段的学习已饱和,是时候切换到更激进的奖励模式,推动它突破瓶颈了。
状态归一化:输入模糊逻辑系统的状态变量(如距离、速度、角度)量纲和范围差异巨大。必须进行归一化处理,例如将所有输入映射到[0, 1]或[-1, 1]区间。这能保证隶属度函数的设计有一个统一的基础,避免某个变量因其数值大而主导了推理结果。归一化参数(最大值、最小值)应根据仿真环境的合理物理范围来设定。
4.3 一份简化的实战配置表示例
以下是一个基于PyBullet或AirSim简易赛道的推荐配置起点:
| 组件 | 参数/选择 | 推荐值/选项 | 说明 |
|---|---|---|---|
| RL算法 | 算法 | PPO | 稳定性好,社区资源丰富 |
| 策略网络 | [256, 256] | 两层隐藏层,每层256个神经元 | |
| 学习率 | 3e-4 -> 1e-5 | 可考虑线性衰减 | |
| 折扣因子 (gamma) | 0.99 | 竞速任务奖励延迟较长 | |
| 广义优势估计(GAE) lambda | 0.95 | 标准值 | |
| 模糊系统 | 隶属度函数 | 三角形/梯形 | 易于实现和解释 |
| 解模糊方法 | 重心法 | 输出平滑 | |
| 规则触发阈值 | 0.15 | 过滤噪声触发 | |
| 奖励设计 | 基础穿门奖励 | +10 | 清晰的正面反馈 |
| 基础碰撞惩罚 | -20 | 足够强烈以阻止危险行为 | |
| 完成一圈奖励 | +200 | 稀疏的最终目标 | |
| 奖励缩放因子 λ | 0.2 | 需要重点调试 | |
| 训练 | 并行环境数 | 16 | 加速数据收集 |
| 总训练步数 | 5e6 - 1e7 | 复杂赛道需要更多 | |
| 评估频率 | 每10000步 | 保存模型并测试一圈 |
踩坑实录:初期我曾将碰撞惩罚设置为-5,结果智能体发现撞墙的代价低于花力气精细操控绕开障碍物,于是发展出了“碰碰车”策略——撞墙反弹后调整方向继续飞。虽然也能偶尔完赛,但完全违背了安全飞行的初衷。将碰撞惩罚大幅提高到-20后,这个行为立即消失了。这告诉我,关键奖励/惩罚的数值必须形成足够的“势能差”,才能引导智能体做出真正期望的行为。
5. 常见问题、排查与性能分析
在实际操作中,你会遇到各种各样的问题。下面我整理了一个问题排查清单,并分享一些性能分析的思路。
5.1 训练过程问题排查表
| 现象 | 可能原因 | 排查与解决思路 |
|---|---|---|
| 奖励不上升,智能体“摆烂” | 1. 初始奖励设置不当,惩罚过重。 2. 探索噪声太大,导致早期体验极差。 3. 学习率过高,策略更新震荡。 | 1.检查日志:看早期回合是否立即收到巨大负奖励。调低初始碰撞惩罚,或增加一个“生存奖励”(每步+0.01)。 2.降低策略网络的初始探索标准差,或使用熵奖励鼓励探索。 3.降低学习率,或使用自适应优化器。 |
| 奖励曲线剧烈震荡 | 1. 奖励稀疏且方差大。 2. 批量大小(batch size)太小。 3. 模糊规则输出不稳定,导致奖励跳变。 | 1.强化奖励塑形:确保每个时间步都有基于状态的、平滑的奖励信号(这正是我们项目的核心)。 2.增大批量大小,提高梯度估计的稳定性。 3.检查模糊系统输入:观测值是否噪声过大?对输入进行低通滤波。检查解模糊方法,尝试改用“平均最大隶属度法”看是否更稳定。 |
| 智能体学会“骗奖励” | 奖励塑形设计有漏洞,存在局部最优。例如,围着门转而不穿过去以持续获取“接近奖励”。 | 仔细审计奖励函数:特别是中间奖励。确保奖励与最终目标一致。可以为塑形奖励添加衰减或依赖条件,比如只有朝向正确时,“接近奖励”才生效。 |
| 训练后期性能无法提升 | 1. 陷入局部最优。 2. 自适应机制未生效或切换不当。 3. 网络容量不足。 | 1.临时增加探索噪声,或引入课程学习,从简单赛道开始。 2.验证自适应逻辑:打印出自适应参数,看其是否按预期变化。调整切换阈值,或改为更平滑的过渡。 3.增大策略网络或价值网络的容量(更多层或神经元)。 |
| 仿真到实物的差距大 | 1. 仿真动力学模型不准确。 2. 状态观测噪声和延迟在实物中更严重。 | 1.在仿真中引入域随机化:随机化无人机质量、惯性、电机响应时间、环境摩擦系数等。这是提升鲁棒性的关键一步。 2.在仿真中提前注入噪声和延迟:对观测状态添加高斯噪声,并模拟几个时间步的延迟。让策略在训练时就学会处理不完美的信息。 |
5.2 如何评估“鲁棒性”的提升?
说一千道一万,我们的方法到底有没有提升鲁棒性?需要定量的评估。不要只看“最好成绩”,而要看“最差情况下的表现”。
定义扰动测试集:系统性地定义一组扰动场景,例如:
- P1: 质量增加20%
- P2: 侧向持续风5m/s
- P3: 陀螺仪零偏增加0.1 rad/s
- P4: 状态观测延迟3个控制周期(约45ms)
选择评估指标:
- 任务成功率:在N次测试中,成功完成赛道的比例。
- 平均圈速:完成赛道的平均时间。
- 平均轨迹偏差:与一条预设理想轨迹的均方根误差(RMSE)。
- 控制平滑度:控制指令(油门、姿态角)的变化率均值。
对比实验:
- 基准模型:仅用稀疏奖励训练的PPO/SAC模型。
- 静态模糊模型:使用固定模糊奖励塑形的模型。
- 我们的模型:使用自适应模糊奖励塑形的模型。 在无扰动和上述**每个扰动场景(P1-P4)**下,分别运行每个模型至少100次,统计上述指标。
分析结果:
- 绝对性能:在无扰动情况下,我们的模型在成功率/圈速上应不逊于或优于基准模型。
- 性能保持率:计算每个模型在扰动下的指标相对于其无扰动指标的百分比。例如,
成功率保持率 = (扰动下成功率 / 无扰动成功率) * 100%。 - 核心结论:一个鲁棒的模型,其性能保持率的下降应该是最小的。也就是说,当环境发生变化时,它的性能衰减更少。如果我们的模型在P1-P4扰动下的圈速保持率和成功率保持率都显著高于基准模型,那么我们就有了强有力的证据,证明“模糊逻辑自适应奖励塑形”有效提升了系统的鲁棒性。
5.3 可视化:理解智能体学到了什么
除了冷冰冰的数字,可视化能提供更直观的洞察。
- 轨迹对比图:在同一个赛道上,绘制基准模型和我们的模型在多次运行中的轨迹。鲁棒性强的模型,其轨迹的方差会更小,即每次飞行路径更一致。
- 状态-动作分布图:绘制在特定状态(如距离墙壁0.5米)下,智能体采取的动作(如俯仰角、横滚角)的分布。我们的模型在危险状态下的动作分布应该更集中、更保守(例如,远离墙壁的方向),而基准模型可能分布更散乱。
- 模糊规则激活热力图:记录在整个测试过程中,每条模糊规则被激活的频率和强度。这可以验证我们的规则设计是否符合预期。例如,在弯道区域,与“角速度平滑”相关的规则是否被频繁激活?
- 奖励成分分解:将总奖励拆解为基础奖励和模糊调整奖励,分别绘制其随时间变化的曲线。这有助于分析在飞行的不同阶段,是哪种奖励在主导智能体的行为。
通过这套从问题排查到定量评估,再到定性可视化的完整流程,你不仅能修复训练中的bug,更能深刻理解你所构建的智能体究竟是如何工作的,以及你的改进方法究竟带来了哪些实质性的提升。这个过程,远比单纯得到一个高分的模型更有价值。
