Files
2026-02-06 13:00:56 +08:00

6.2 KiB

AeroEngine Control Challenge: 航空发动机智能全包线控制挑战赛

📖 项目简介 (Introduction)

本项目提供了一个高保真的双转子涡扇发动机仿真环境,旨在探索深度强化学习 (Deep RL) 在复杂工业控制系统中的应用。

参赛者需要设计一个智能 Agent(替代传统的 FADEC 电子控制器),在全飞行包线内实现对航空发动机的精准控制。任务涵盖了从地面冷态起动慢车维持高空巡航的全过程,要求在满足严苛的安全约束(温度、压力、转速限制)前提下,实现对双转子转速的快速、无静差追踪。


🌟 核心特性 (Key Features)

  • 高保真物理模型:底层基于 C++ 编译的 DLL 热力学模型,能够真实反映发动机在不同工况下的非线性、强耦合特性。
  • Gymnasium 标准接口:完全兼容 OpenAI/Farama Gymnasium API,可直接接入 PPO, SAC, TD3 等主流强化学习算法。
  • 多变量解耦控制:涉及燃油流量 () 与尾喷管面积 () 的协同控制 (2-DOF Control)。
  • 全流程仿真:支持从静止状态 () 开始的起动过程模拟,包含起动机介入与点火逻辑。
  • 官方 PID 基准:内置增量式 PID 控制器基准代码,展示了无扰切换与解耦控制策略。

🛠️ 安装说明 (Installation)

  1. 环境依赖 建议使用 Python 3.8 或更高版本。
  2. 安装步骤 在项目根目录下运行以下命令进行安装:
cd AeroEngineChallenge
pip install -e .

  1. 验证安装 运行随机测试脚本,确保环境无报错:
python test_random.py


🎮 环境说明 (Environment Specs)

1. 状态空间 (Observation Space)

维度:Box(8,),包含物理状态、控制目标及误差。

索引 名称 描述 单位/备注
0 NH 高压转子转速 归一化 (0~1.0)
1 NL 低压转子转速 归一化 (0~1.0)
2 T5 涡轮后温度 K (开尔文)
3 P3 压气机出口压力 kPa
4 Target_NH 高压转速目标 由 PLA 查表得到
5 Target_NL 低压转速目标 由 PLA 查表得到
6 Error_NH Target_NH - NH 误差
7 Error_NL Target_NL - NL 误差

2. 动作空间 (Action Space)

维度:Box(5,),范围 [-1.0, 1.0]。Agent 输出后会被映射到物理范围。

索引 名称 物理范围 说明
0 FanVane -20° ~ 20° 风扇导叶 (辅助)
1 CompVane -20° ~ 20° 压气机导叶 (辅助)
2 AddPower 0 ~ 100 kW 起动电机功率 (仅起动阶段使用)
3 Wf 50 ~ 5000 kg/h 燃油流量 (主控变量)
4 A8 0.2 ~ 0.6 尾喷管面积 (主控变量)

3. 任务输入:PLA (Power Lever Angle)

环境不自动生成任务曲线,需通过外部接口设置油门杆角度:

env.set_pla(60.0) # 设置当前油门为 60度

  • 0° ~ 15°: 起动/慢车区
  • 15° ~ 110°: 工作区 (推力增加)

🏆 评价指标 (Evaluation Metrics)

比赛的最终得分由环境返回的 Reward 决定,包含以下几个维度:

  1. 跟踪精度 (Tracking Accuracy):
  • 核心指标。计算 和 与目标的均方误差。
  1. 起动性能 (Startup Performance):
  • 起动耗时越短越好。
  • 消耗的起动功率 (AddPower) 越少越好。
  1. 动态品质 (Dynamic Quality):
  • 超调量: 超过目标值会有额外惩罚。
  • 调节时间: 快速进入 2% 误差带内。
  1. 动作平滑性 (Smoothness):
  • 惩罚控制量(特别是燃油和喷管)的剧烈高频抖动。
  1. 安全约束 (Safety Constraints):
  • 硬约束 (Terminated): 触发即任务失败 (Reward -1000)。

  • (超温)

  • 或 (超转)

  • 软约束 (Penalty): 超过控制计划限制但未达硬限,持续扣分。


🚀 快速开始 (Quick Start)

1. 运行 PID 基准

我们提供了一个基于增量式 PID解耦控制策略 的强力 Baseline。

  • 策略: 燃油控制高压转子 (),喷管控制低压转子 ()。
  • 运行:
python test_pid_correct_pairs.py

运行后将生成详细的仿真曲线图,展示起动及加速全过程。

2. 训练强化学习 Agent (示例)

import gymnasium as gym
from engine_env.envs.engine_env import AeroEngineGymEnv

# 1. 初始化环境
env = AeroEngineGymEnv()
obs, info = env.reset(options={'pla': 0.0})

# 2. 模拟训练循环
for step in range(1000):
    # 设定任务:前200步起动(15度),之后巡航(60度)
    pla_cmd = 15.0 if step < 200 else 60.0
    env.set_pla(pla_cmd)
    
    # 随机动作 (替换为你的 RL Policy)
    action = env.action_space.sample()
    
    # 环境交互
    obs, reward, terminated, truncated, info = env.step(action)
    
    if terminated:
        print("Crash! Resetting env...")
        obs, info = env.reset()

env.close()


📂 项目结构

AeroEngineChallenge/
├── README.md                 # 项目说明书
├── setup.py                  # 安装脚本
├── test_pid_correct_pairs.py # 官方 PID 基准测试 (推荐)
├── test_random.py            # 随机动作测试
└── engine_env/               # 核心包
    ├── __init__.py
    ├── core_model.py         # DLL 调用接口
    ├── libEngine.dll         # 发动机物理模型库
    ├── schedule.py           # 控制计划 (PLA插值)
    └── envs/
        ├── __init__.py
        └── engine_env.py     # Gym 环境主程序


💡 参赛 Tips

  1. 物理直觉: 喷管面积 () 对低压转子 () 影响直接,且呈现负相关特性(关小喷管 增加背压 转速上升)。不要忽视物理规律。
  2. 起动难点: 在 的起动阶段,必须配合使用 AddPower 和合适的燃油供给,防止熄火或超温悬挂。
  3. 奖励设计: 官方 Reward 函数较为严格,训练初期建议使用 RewardWrapper 进行适当的 Reward Shaping (如放宽误差容忍度) 以加速收敛。

祝各位选手挑战成功,飞出完美包线! ✈️