【深度强化学习】《强化学习》第二章代码分析与实现

0 问题叙述

你需要重复地在 K 个选项或动作中进行选择,每次做出选择之后,你都会得到一定数值的收益,收益由你选择的动作决定的平稳概率分布产生。

这里 使用 2000 个随机生成的 k-臂XX机问题,训练 1000 步

案例来源:《强化学习》第三版


1 导包

 其中 tqdm 是用来形成进度条的包,在循环较大的时候可以看任务执行的进度。


2 初始化 K-臂XX机 

这里跟书上一样选取 K = 10。

 输出结果如下:

在每一个 k-臂XX机问题中,动作的 真实价值 q_{*}(a) 从一个均值为0,方差为1的标准正态分布中选择

对应于该问题的学习方法 在 t 时刻,选择行为 A_{t} 时,实际收益 R_{t} 由一个均值为 q_{*}(A_{t}),方差为1的标准正态分布决定

该部分代码只是将一个10-臂XX机平台可视化,而在接下来的实验中,将通过reset函数完成XX机的建立(初始化行为真实价值等),将建立2000个XX机问题。


3 创建 Bandit 类

Bandit 类也就是 Agent 类,具有以下多个属性以及方法,分析如下:

 根据根据 ε-贪心算法、UCB算法和梯度算法完成以上三个函数。

reset()

要初始化 k-臂XX机 的 k 行为的真实价值,并且进行初始估计。

 act()

根据不同算法的行为选择的特点,进行以下汇总:

 进行代码编写:

 step()

根据更新行为价值估计的方式不同,分为以下三类:

 编写代码如下:


4 simulate函数

封装了训练过程。


 5 贪心与 ε-贪心方法

 使用 for 技巧建立三个 Bandit,ε=0 即是贪心算法。

 输出图像如下:


6 乐观初始值

分别使用 乐观初始化,贪心算法 以及  一般初始化,ε-贪心算法,都使用 恒定步长0.1

 输出结果如下:


 7 基于置信度上界的动作选择

 输出结果:


 8 梯度XX机算法

 输出结果:


 9 XX机算法的参数研究图

 输出结果:


 具体代码请私信博主。

Guess you like

Origin blog.csdn.net/weixin_41960890/article/details/119651052