0 问题叙述
你需要重复地在 K 个选项或动作中进行选择,每次做出选择之后,你都会得到一定数值的收益,收益由你选择的动作决定的平稳概率分布产生。
这里 使用 2000 个随机生成的 k-臂XX机问题,训练 1000 步。
案例来源:《强化学习》第三版
1 导包
其中 tqdm 是用来形成进度条的包,在循环较大的时候可以看任务执行的进度。
2 初始化 K-臂XX机
这里跟书上一样选取 K = 10。
输出结果如下:
在每一个 k-臂XX机问题中,动作的 真实价值 从一个均值为0,方差为1的标准正态分布中选择。
对应于该问题的学习方法 在 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机算法的参数研究图
输出结果:
具体代码请私信博主。