这份文档只面向一个目标:让第一次接触项目的人,先跑通一个强化学习空战训练任务。
你不需要先理解空战模型、C++ 绑定、奖励函数或观测空间。先跑通,再看配置。
先跑这条最小训练命令:
python -m bvr_sim_rl --backend python --config tests/demo_config.json --timesteps 128 --rollouts 16 --device cpu它会用纯 Python 后端启动一个很短的 PPO 训练任务。跑通后,再切到 C++ 后端做更快训练。
在仓库根目录创建虚拟环境:
python -m venv .venvWindows PowerShell:
.\.venv\Scripts\Activate.ps1Linux/macOS:
source .venv/bin/activate安装项目和 RL 依赖:
pip install -e ".[rl]"如果引号导致 shell 报错,就分两步:
pip install -e .
pip install skrl torch先用 Python 后端,因为它不需要编译 C++。
python -m bvr_sim_rl --backend python --config tests/demo_config.json --timesteps 128 --rollouts 16 --device cpu这不是为了训练出强策略,而是为了确认:
- Python 包能导入
- 仿真环境能 reset/step
skrlPPO 能拿到观测和动作- 日志和 checkpoint 能写出
输出目录:
runs/bvr_sim_rl/
想跑久一点:
python -m bvr_sim_rl --backend python --config tests/demo_config.json --timesteps 10000C++ 后端更适合正式训练。先编译:
Windows:
bvr_sim\build_windows.batLinux:
bash bvr_sim/build_linux.sh快速确认 C++ 后端能训练:
python -m bvr_sim_rl --backend cpp --config tests/demo_config_cpp.jsonc --timesteps 128 --rollouts 16 --device cpu正式一点的训练:
python -m bvr_sim_rl --backend cpp --config tests/demo_config_cpp.jsonc --timesteps 10000核心文件只有两个:
bvr_sim_rl/env.py
bvr_sim_rl/ppo.py
env.py 负责把 BVR Sim 包装成 skrl 可以训练的环境。
ppo.py 负责创建 PPO 模型、memory、agent 和 trainer。
仿真器原始动作空间是:
MultiDiscrete([15, 15, 9, 2])
四个维度分别是:
delta_heading, delta_altitude, delta_speed, shoot
bvr_sim_rl 直接保留仿真器的离散动作空间:
MultiDiscrete([15, 15, 9, 2])
PPO 使用四个 categorical 分支分别建模航向、高度、速度和发射动作, 训练时优化的动作与仿真器实际执行的动作一致,不再经过连续值量化。
如果训练失败,先确认仿真器本身能跑。
Python 后端:
python tests/test_py.pyC++ 后端:
python tests/test_cpp.py完整测试:
python run_tests.py部分测试和示例会生成:
test_logs/*.acmi
用 Tacview 打开 .acmi 文件,可以查看空战轨迹。
训练命令默认不一定生成回放。如果你想确认回放功能,先跑:
python tests/test_py.py
python tests/test_cpp.py建议顺序:
想继续改仿真和任务,再看:
执行:
pip install skrl torch说明 C++ 后端还没有编译,先执行:
bvr_sim\build_windows.bat或:
bash bvr_sim/build_linux.sh先跑:
python tests/test_cpp.py如果这里失败,问题在 C++ 构建或原生扩展导入,不在 PPO。
先确认你用的是 C++ 后端:
python -m bvr_sim_rl --backend cpp --config tests/demo_config_cpp.jsonc --timesteps 10000训练默认关注 checkpoint 和日志,不一定打开 ACMI。需要回放时先跑 smoke test 或专门的示例脚本。