求解释强化学习案例中4行numpy相关代码的具体含义
多臂老虎机指定代码行解释
前置说明:先明确两个核心数组的定义,方便理解代码逻辑:
av:形状为(N,2)的历史记录数组,每一行结构为[臂的编号, 本次选择该臂获得的奖励],N是已尝试的总次数arms:长度为10的数组,每个元素对应一个臂的真实获奖概率,是环境预先生成的固定值
以下是你提到的4行代码的逐行含义:
- 第一行:
avg= np.mean(a[np.where(a[:,0]== u[0])][:,1])
该代码位于选择最优臂的bestArm函数中,作用是计算指定臂的历史平均奖励:- 先通过
a[:,0]==u[0]匹配历史记录中所有和当前遍历的臂u[0]编号一致的记录 np.where()返回符合条件的记录的索引,用索引从a中取出该臂的所有历史尝试记录- 用
[:,1]提取这些记录中的奖励列,最后用np.mean计算该臂的历史平均奖励
- 先通过
- 第二行:
bestArm = u[0]
该代码位于bestArm函数的判断分支内,当当前遍历的臂的平均奖励高于之前记录的最高平均奖励时,将当前臂的编号u[0]赋值给bestArm,更新当前最优臂的记录。 - 第三行:
choice = np.where(arms == np.random.choice(arms))[0][0]
该代码是探索阶段的选臂逻辑:np.random.choice(arms)从10个臂的真实概率数组中随机挑选一个概率值np.where()找到该概率值在arms数组中对应的下标,也就是臂的编号[0][0]是因为np.where返回的是符合条件的索引组成的元组,取第一个元素的第一个值即可得到随机选中的探索臂的编号
- 第四行:
runningMean = np.mean(av[:,1])
提取历史记录数组av中所有的奖励值,计算到当前轮次为止所有尝试的平均奖励,用于后续绘制奖励随训练次数变化的散点图。
内容的提问来源于stack exchange,提问作者OJ Okafor
相关产品推荐
相关产品推荐

