下载压缩包
这是elegantrl的开源地址: ElegantRL
我使用的是云服务器平台,上传压缩包之后,使用Linux解压缩命令,将压缩包解压。
使用conda新建一个虚拟环境
conda create -n ElegantRL
conda activate ElegantRL
安装elegantrl包
pip install elegantrl
如果出现以下报错,是因为,问题出在安装 box2d-py 时缺少 swig 工具。swig 是一个用于将 C/C++ 代码与 Python 集成的工具,而 box2d-py 依赖于它来编译其 C++ 扩展
sudo apt update
sudo apt install swig
再重新运行pip install elegantrl
打开jupyter,我需要把创建的虚拟环境ElegantRL加入到kernel中
在虚拟环境中安装 ipykernel,这是一个用于将虚拟环境添加到 Jupyter Kernel 的工具。
pip install ipykernel
python -m ipykernel install --user --name=ElegantRL --display-name "Python (ElegantRL)"
–name=ElegantRL:指定 Kernel 的名称(内部标识)。
–display-name “Python (ElegantRL)”:指定在 Jupyter Notebook 中显示的名称。
现在选择kernel时,可以选择我创建的虚拟环境了
先学习一下发布的几个教程文件
如果刚才没有在虚拟环境中安装elegantrl包,在教程文件ipynb中,作者首先提供了通过github下载elegantrl的方式,点击运行即可。
# install elegantrl library
!pip install git+https://github.com/AI4Finance-LLC/ElegantRL.git
第二部分是要导入需要用到的包
关于包的结构,如下图所示。
gym.logger.set_level(40) 是 OpenAI Gym 库中的一个设置,用于控制日志输出的级别。具体来说,这行代码的作用是将 Gym 的日志级别设置为 40,即 ERROR 级别,从而屏蔽掉所有低于 ERROR 级别的日志信息(如 WARNING、INFO、DEBUG 等)。
日志级别说明
在 Python 的 logging 模块中,日志级别从低到高分为以下几种:
DEBUG (10):详细的调试信息。
INFO (20):一般的信息性消息。
WARNING (30):警告信息,表示潜在的问题。
ERROR (40):错误信息,表示程序出现了问题。
CRITICAL (50):严重错误,可能导致程序崩溃。
通过设置日志级别,可以控制哪些级别的日志信息会被输出。例如:
如果设置为 WARNING (30),则只会输出 WARNING、ERROR 和 CRITICAL 级别的日志。
如果设置为 ERROR (40),则只会输出 ERROR 和 CRITICAL 级别的日志。
gym.logger.set_level(40) 的作用
屏蔽警告信息:
Gym 在某些情况下会输出警告信息(如环境过时、参数不推荐等)。
通过将日志级别设置为 ERROR,可以屏蔽这些警告信息,使输出更加简洁。
减少干扰:
在训练强化学习模型时,过多的日志信息可能会干扰对训练过程的观察。
屏蔽不必要的日志信息可以让输出更加专注于关键信息。
第三部分是创建环境
代码解释
gym.make(“BipedalWalker-v3”)
这是 OpenAI Gym 的标准方法,用于创建 BipedalWalker-v3 环境。
BipedalWalker-v3 是一个双足机器人行走任务,目标是让机器人在复杂地形上行走。
get_gym_env_args(env, if_print=False)
这是一个ElegantRL 库中的自定义函数,用于从 Gym 环境中提取关键信息。
参数:
env:Gym 环境对象。
if_print:是否打印提取的信息。这里设置为 False,表示不打印。
输出结果解释
- env_name
环境名称:BipedalWalker-v3。
表示这是一个双足机器人行走任务。
- num_envs
环境数量:1。
表示当前只使用了一个环境实例。
- max_step
每个 episode 的最大步数:1600。
如果智能体在 1600 步内没有完成任务,episode 会自动终止。
- state_dim
状态空间的维度:24。
表示观测空间是一个 24 维的向量,通常包括机器人的关节角度、速度、地形信息等。
- action_dim
动作空间的维度:4。
表示动作空间是一个 4 维的向量,通常用于控制机器人的关节角度或力度。
- if_discrete
动作空间是否为离散:False。
表示动作空间是连续的,而不是离散的。
第四部分:指定强化学习智能体(Agent)和环境(Environment)
初始化配置
args = Config(AgentPPO, env_class=env_func, env_args=env_args)
Config 是一个ElegantRL库中的配置类,用于初始化训练参数。
参数:
AgentPPO:指定使用的强化学习算法,这里是 PPO(Proximal Policy Optimization)。
env_class:环境创建函数,这里是 gym.make。
env_args:环境参数,这里是前面定义的 env_args 字典。
这段代码用于设置强化学习训练中的超参数(Hyper-parameters)。以下是代码的详细解释:
1. args.target_step = args.max_step * 4
- 作用:设置每次训练的目标步数。
- 解释:
args.max_step
是每个 episode 的最大步数(在之前的代码中设置为1600
)。args.target_step
是每次训练的目标步数,这里设置为args.max_step * 4
,即6400
。- 这意味着每次训练会收集
6400
步的经验数据。
2. args.gamma = 0.98
- 作用:设置折扣因子(Discount Factor)。
- 解释:
gamma
是强化学习中的一个重要超参数,用于衡量未来奖励的重要性。gamma
的取值范围是[0, 1]
,值越大表示未来奖励越重要。- 这里设置为
0.98
,表示未来奖励的权重较高。
3. args.eval_times = 2**2
- 作用:设置评估次数。
- 解释:
args.eval_times
是每次评估时运行的 episode 次数。- 这里设置为
2**2
,即4
次。 - 评估用于测试智能体在训练过程中的表现。
4. args.repeat_times = 8
- 作用:设置每次更新时的重复次数。
- 解释:
args.repeat_times
是每次更新策略时重复使用经验数据的次数。- 这里设置为
8
,表示每次更新会重复使用经验数据8
次。 - 这有助于提高数据利用率,但可能会增加过拟合的风险。
总结
这段代码设置了以下超参数:
- 目标步数:每次训练的目标步数为
6400
。 - 折扣因子:
gamma
设置为0.98
,表示未来奖励的权重较高。 - 评估次数:每次评估运行
4
个 episode。 - 重复次数:每次更新策略时重复使用经验数据
8
次。
这些超参数对强化学习算法的性能和收敛速度有重要影响。通过调整这些参数,可以优化训练过程。
如果 args.eval_times = 4,则每次评估会运行 4 个 episode,然后计算这 4 个 episode 的平均表现。
为什么需要多次评估:
强化学习中的环境通常具有随机性(如初始状态、动作效果等)。
通过多次运行 episode 并取平均值,可以减少随机性对评估结果的影响,得到更稳定的性能指标。