master
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)
- 环境依赖 建议使用 Python 3.8 或更高版本。
- 安装步骤 在项目根目录下运行以下命令进行安装:
cd AeroEngineChallenge
pip install -e .
- 验证安装 运行随机测试脚本,确保环境无报错:
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 决定,包含以下几个维度:
- 跟踪精度 (Tracking Accuracy):
- 核心指标。计算 和 与目标的均方误差。
- 起动性能 (Startup Performance):
- 起动耗时越短越好。
- 消耗的起动功率 (
AddPower) 越少越好。
- 动态品质 (Dynamic Quality):
- 超调量: 超过目标值会有额外惩罚。
- 调节时间: 快速进入 2% 误差带内。
- 动作平滑性 (Smoothness):
- 惩罚控制量(特别是燃油和喷管)的剧烈高频抖动。
- 安全约束 (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
- 物理直觉: 喷管面积 () 对低压转子 () 影响直接,且呈现负相关特性(关小喷管 增加背压 转速上升)。不要忽视物理规律。
- 起动难点: 在 的起动阶段,必须配合使用
AddPower和合适的燃油供给,防止熄火或超温悬挂。 - 奖励设计: 官方 Reward 函数较为严格,训练初期建议使用
RewardWrapper进行适当的 Reward Shaping (如放宽误差容忍度) 以加速收敛。
祝各位选手挑战成功,飞出完美包线! ✈️
Languages
Python
100%