第0篇 先导篇 1
1一个极其简单的强化学习实例 2
1.1 多臂赌博机 2
1.1.1 ε-greedy策略 3
1.1.2 玻尔兹曼策略 6
1.1.3 UCB策略 7
1.2 多臂赌博机代码实现 7
2马尔可夫决策过程 13
2.1 从多臂赌博机到马尔可夫决策过程 13
2.2 马尔可夫决策过程代码实现 23
第1篇 基于值函数的方法 31
3基于动态规划的方法 32
3.1 策略迭代与值迭代 32
3.1.1 策略迭代算法原理 33
3.1.2 值迭代算法原理 35
3.2 策略迭代和值迭代的代码实现 36
3.2.1 鸳鸯环境的修改 36
3.2.2 策略迭代算法代码实现 37
3.2.3 值迭代算法代码实现 41
4基于蒙特卡洛的方法 45
4.1 蒙特卡洛算法原理 46
4.2 蒙特卡洛算法的代码实现 49
4.2.1 环境类的修改和蒙特卡洛算法类的声明 49
4.2.2 探索初始化蒙特卡洛算法实现 52
4.2.3 同策略蒙特卡洛算法实现 56
5基于时间差分的方法 62
5.1 从动态规划到时间差分强化学习 62
5.2 时间差分算法代码实现 66
5.2.1 时间差分算法类的声明 66
5.2.2 SARSA算法 67
5.2.3 Q-Learning算法 70
6基于函数逼近的方法 74
6.1 从表格型强化学习到线性函数逼近强化学习 74
6.1.1 表格特征表示 74
6.1.2 固定稀疏表示 75
6.1.3 参数的训练 76
6.2 基于线性函数逼近的Q-Learning算法实现 76
6.3 非线性函数逼近DQN算法代码实现 85
第2篇 直接策略搜索的方法 95
7策略梯度方法 96
7.1 算法基本原理及代码架构 96
7.1.1 策略的表示问题 97
7.1.2 随机策略梯度的推导 98
7.1.3 折扣累积回报 99
7.1.4 代码架构 101
7.2 离散动作:CartPole实例解析及编程实战 103
7.2.1 CartPole简介 103
7.2.2 问题分析及MDP模型 104
7.2.3 采样类的Python源码实现 105
7.2.4 策略网络模型分析 106
7.2.5 策略网络类的Python源码实现 108
7.2.6 策略网络的训练与测试 110
7.2.7 用策略梯度法求解Cartpole的主函数 112
7.2.8 CartPole仿真环境开发 113
7.3 连续动作Pendulum实例解析及编程实战 117
7.3.1 Pendulum简介 118
7.3.2 采样类的Python源代码实现 118
7.3.3 策略网络模型分析 120
7.3.4 策略网络类的Python源码实现 121
7.3.5 策略网络的训练与测试 125
7.3.6 用策略梯度法求解Pendulum的主函数 126
7.3.7 Pendulum仿真环境开发 127
8 Actor-Critic方法 131
8.1 Actor-Critic原理及代码架构 131
8.1.1 Actor-Critic基本原理 131
8.1.2 Actor-Critic算法架构 133
8.2 TD-AC算法 133
8.2.1 采样类的Python源码 134
8.2.2 策略网络的Python源码 135
8.2.3 策略训练和测试 138
8.2.4 主函数及训练效果 140
8.3 Minibatch-MC-AC算法 141
8.3.1 Minibatch-MC-AC算法框架 141
8.3.2 采样类的Python源码 142
8.3.3 策略网络的Python源码 144
8.3.4 策略的训练和测试 147
8.3.5 主函数及训练效果 149
9 PPO方法 151
9.1 PPO算法基本原理及代码结构 151
9.2 Python源码解析 154
9.2.1 采样类 154
9.2.2 策略网络 156
9.2.3 策略的训练和测试 159
9.2.4 主函数及训练效果 160
10 DDPG方法 163
10.1 DDPG基本原理 163
10.2 Python源码解析 167
10.2.1 经验缓存器类 167
10.2.2 策略网络类 169
10.2.3 训练和测试 173
10.2.4 主函数及训练效果 175
第3篇 基于模型的强化学习方法 177
11基于模型预测控制的强化学习算法 178
11.1 基于模型的强化学习算法的基本原理 178
11.1.1 神经网络拟合动力学模型 179
11.1.2 模型预测控制 179
11.1.3 基于模型的强化学习算法伪代码 180
11.2 Python源码实现及解析 181
11.2.1 数据收集类 181
11.2.2 数据采样类 181
11.2.3 动力学网络类 182
11.2.4 模型预测控制器类 185
11.2.5 模型训练和预测函数 186
11.2.6 主函数 188
12 AIphaZero原理浅析 190
12.1 从AlphaGo到AlphaZero 191
12.2 蒙特卡洛树搜索算法 196
12.2.1 博弈树和极小极大搜索 196
12.2.2 再论多臂老虎机问题 198
12.2.3 UCT算法 200
12.3 基于自我对弈的强化学习 206
12.3.1 基于MCTS的自我对弈 206
12.3.2 策略价值网络的训练 210
13 AIphaZero实战:从零学下五子棋 214
13.1 构建简易的五子棋环境 215
13.2 建立整体算法流程 223
13.3 实现蒙特卡洛树搜索 229
13.4 实现策略价值网络 235
13.5 训练实验与效果评估 240
附录A PyTorch入门 246
A.1 PyTorch基础知识 246
A.1.1 Tensor 246
A.1.2 基础操作 247
A.1.3 Tensor和NumPy array间的转化 249
A.1.4 Autograd:自动梯度 249
A.2 PyTorch中的神经网络 250
A.2.1 如何定义神经网络 251
A.2.2 如何训练神经网络 254
A.2.3 在CIFAR-10数据集上进行训练和测试 256
A.2.4 模型的保存和加载 259
参考文献 261
后记 263