《用Python动手学强化学习》学习笔记
使用 pipenv 管理项目依赖
源码下载地址:ituring.cn/book/2794
这本书使用 conda 进行环境管理,我习惯使用 pipenv 进行管理,这里记录使用 pipenv 搭建项目的过程。
关于 pipenv 这个 Python 项目管理工具的使用方式可参见 Pipenv。
项目根目录下执行命令:
$ pipenv --python 3.6 install
pipenv 比较好的一点是它把 Python 版本也纳入管理范围内了,比如说监测到我没有装某个版本的 Python,会自动去帮我下载安装。
(base) maxiee@rmbp16 baby-steps-of-rl-ja-master % pipenv --python 3.6 install
Warning: Python 3.6 was not found on your system...
Would you like us to install CPython 3.6.14 with Pyenv? [Y/n]: y
Installing CPython 3.6.14 with /usr/local/bin/pyenv (this may take a few minutes)...
⠇ Installing python...
conda 也能实现这一点,但是我还是更加喜欢贴近 Python 原生的包管理方式。
在构建的时候遇到了报错,原因记录在 Pipenv 中,如果在 Big Sur 及以上 macOS 版本安装 3.7.8 以下的老 Python 就会遇到这个问题。
解决方式是改用下面命令安装:
pyenv install --patch 3.6.14 <<(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)
这样就能安装成功了。
README.md
项目下这么多目录该怎么看呢?项目根目录下的 README.md 已经给整理好了,从 Day1 到 Day7。
7 天学完,这安排的有点紧凑,我还是按照自己的节奏来吧……
本文主要目的是把每个目录是干什么搞明白,都跑起来。不记录强化学习相关知识,这些知识会在专门的文章中介绍。
DP 目录
包含 3 个程序:
- environment_demo.py:理解 MDP
- 迷宫学习环境,P12 环境介绍
- 在 DP/environment.py 中包含了对这个环境的建模
- 在 DP/environment_demo.py 中记录了一个随机选择 Agent 在环境下进行 10 步的过程
- bellman_equation.py:理解 Bellman方程,P25
- planner.py:理解动态规划
- run_server.py 能够运行一个在线的动态规划模拟器

run_server.py
动态规划模拟器,很有意思。可以本地运行,可以设置地图大小以及奖励块、惩罚块以及障碍物的位置,最终通过两种策略实现规划。最终以动画的形式将整个规划呈现出来。作者真是用心了。
Server 的代码在 application.py 里面,用到了前面开发的 DP/environment.py。使用 tornado 框架搭建。
前端模板在 DP/templates/index.html 下。
整个前端应用很有意思,index.html 以 JS 的方式引用了 VUE,然后在 DP/static/js/index.js 中编写了前端逻辑,因此整个应用是一个 VUE 程序,但是没有基于现代化前端那套构建的东西,这个很不错,值得学习。
EL 目录
里面包含一个 notebooks 子目录,里面有很多 NoteBooks。
EL 目录下的代码都是一些基类,供各个 Notebooks 使用。
EL/notebooks/Epsilon&Greedy.ipynb
演示 Epsilon-Greedy 法。
EL/notebooks/Monte Carlo.ipynb
演示蒙特卡洛法。
EL/notebooks/Q-learning.ipynb
演示时间差分法。
EL/notebooks/SARSA.ipynb
演示 SARSA 算法。
EL/notebooks/Actor&Critic.ipynb
演示 AC 算法。
FN 目录
FN/nn_tutorial 子目录
讲解神经网络。基于 Keras。
FN/value_function_agent.py
价值函数的实现
FN/dqn_agent.py
实现使用 DNN 的价值函数: DQN
FN/policy_gradient_agent.py
实现参数化策略函数: Policy Gradient
FN/a2c_agent.py
实现使用 DNN 的参数化策略函数 A2C
MM 目录
与 model-based一起使用的算法: Dyna
EV 目录
新的学习方法: 遗传算法
IM 目录
模仿学习: DAgger
IRL 目录
逆强化学习: MaxEntropy/Bayesian
学习 Todo 拆解
这一节主要记录自己阅读过程中,给自己设立的一些目标:
- P22 Bellman方程:与已有笔记做融合,理解书中的 Demo 代码 bellman_equation.py 的含义,整理到笔记中去
- P31 动态规划:强化学习到底跟动态规划有什么关系?RL:Introduction 里面有一章是动态规划,一起搞清楚
- 动态规划模拟器里面对 VUE 的使用方式很不错
- EL 目录下的算法,都要自己手写一遍,最好是创建一个单独的 JupyterLab,在里面把各种强化学习学习代码都放进去