分类
联系方式
  1. 新浪微博
  2. E-mail

《用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,在里面把各种强化学习学习代码都放进去