控制程序观前提醒:本章内容为训练一个强化学习模型,并使用强化学习模型控制月球着陆器。安装和运行DI-engine示例。
什么是DI-engine?
DI-engine 是一个由 OpenDILab 提供的开源强化学习(Reinforcement Learning,简称RL)库,它旨在提供一个易于使用、灵活且高效的RL算法研究和应用平台。DI-engine 不仅支持多种RL算法,还提供了易于扩展的接口,可以帮助研究人员和开发者快速开发和测试自己的RL算法。
它将为我们的强化学习算法研究和开发工作提供最专业最便捷的帮助,主要包括:
- 完整的算法支持,例如 DQN,PPO,SAC 以及许多研究子领域的相关算法——多智能体强化学习中的 QMIX,逆强化学习中的 GAIL,探索问题中的 RND 等等。
- 友好的用户接口,我们抽象了强化学习任务中的大部分常见对象,例如环境,策略,并将复杂的强化学习流程封装成丰富的中间件,让您随心所欲的构建自己的学习流程。
- 弹性的拓展能力,利用框架内集成的消息组件和事件编程接口,您可以灵活的将基础研究工作拓展到工业级大规模训练集群中,例如星际争霸智能体 DI-star。
DI-engine 的特点
- 丰富的算法支持:DI-engine 实现了众多经典和现代的强化学习算法。
- 模块化设计:组件化的设计使得算法、环境、网络结构等模块可以自由组合。
- 易于扩展:提供了简单的接口来添加新的算法、环境或其他组件。
- 分布式训练:支持多进程或多机训练,提升了训练效率。
- 多环境适应性:可以与OpenAI Gym、DM Control等多种环境接口兼容。
安装DI-engine
在安装DI-engine之前,请确保你的计算环境满足以下条件:
- Python 3.6+
- PyTorch 1.4+
- 其它依赖库
你可以通过Python的包管理工具pip来安装DI-engine:
pip install DI-engine
踩坑提醒:gym在安装时会报错。gym是一个强化学习的Python库,它依赖box2d,box2d是一个游戏领域的2D图形引擎,它在运行时又会依赖到swig,swig是一个将c/c++代码封装为Python库的工具(是Python调用c/c++库的一种常见手段)。不过现在swig可以通过pip安装,所以我们只需提前运行:
pip install swig
控制程序
import gym # 载入 gym 库,用于标准化强化学习环境import torch # 载入 PyTorch 库,用于加载 Tensor 模型,定义计算网络from easydict import EasyDict # 载入 EasyDict,用于实例化配置文件from ding.config import compile_config # 载入DI-engine config 中配置相关组件from ding.envs import DingEnvWrapper # 载入DI-engine env 中环境相关组件from ding.policy import DQNPolicy, single_env_forward_wrapper # 载入DI-engine policy 中策略相关组件from ding.model import DQN # 载入DI-engine model 中模型相关组件from dizoo.box2d.lunarlander.config.lunarlander_dqn_config import main_config, create_config # 载入DI-zoo lunarlander 环境与 DQN 算法相关配置def main(main_config: EasyDict, create_config: EasyDict, ckpt_path: str): main_config.exp_name = 'lunarlander_dqn_deploy' # 设置本次部署运行的实验名,即为将要创建的工程文件夹名 cfg = compile_config(main_config, create_cfg=create_config, auto=True) # 编译生成所有的配置 env = DingEnvWrapper(gym.make(cfg.env.env_id), EasyDict(env_wrapper='default')) # 在gym的环境实例的基础上添加DI-engine的环境装饰器 env.enable_save_replay(replay_path='./lunarlander_dqn_deploy/video') # 开启环境的视频录制,设置视频存放位置 model = DQN(**cfg.policy.model) # 导入模型配置,实例化DQN模型 state_dict = torch.load(ckpt_path, map_location='cpu') # 从模型文件加载模型参数 model.load_state_dict(state_dict['model']) # 将模型参数载入模型 policy = DQNPolicy(cfg.policy, model=model).eval_mode # 导入策略配置,导入模型,实例化DQN策略,并选择评价模式 forward_fn = single_env_forward_wrapper(policy.forward) # 使用简单环境的策略装饰器,装饰DQN策略的决策方法 obs = env.reset() # 重置初始化环境,获得初始观测 returns = 0. # 初始化总奖励 while True: # 让智能体的策略与环境,循环交互直到结束 action = forward_fn(obs) # 根据观测状态,决定决策动作 obs, rew, done, info = env.step(action) # 执行决策动作,与环境交互,获得下一步的观测状态,此次交互的奖励,是否结束的信号,以及其它环境信息 returns += rew # 累计奖励回报 if done: break print(f'Deploy is finished, final epsiode return is: {returns}')if __name__ == "__main__": main(main_config=main_config, create_config=create_config, ckpt_path='./final.pth.tar')
点击DI-engine强化学习入门(一)使用强化学习模型控制月球着陆器 - 古月居 可查看全文