强化学习代码实战(2) --- 多臂赌博机

目录

前言

1.Python基础

2.Numpy基础

3.多臂赌博机

参考文献


前言

本文内容来自于南京大学郭宪老师在博文视点学院录制的视频,课程仅9元地址,配套书籍为深入浅出强化学习 编程实战 郭宪地址

1.Python基础

  1. print()

可以用该语句查看当前数据的情况,验证数据过程是否正确,也就是验证代码写的是否正确。

  1. if...else...
  1. for循环

  2. while循环

  1. 函数定义

数据成员

函数成员

子类初始化时要用super()(本质上还是对基类进行初始化)

2.Numpy基础

3.多臂赌博机

多臂赌博机希望可以得到摇动N次后得到到最高的回报,对于该赌博机,有回报模型(摇一次出多少币是确定的),但没有状态转移模型,所以是一个无模型问题。

以下图为例,在多臂赌博机中,动作a=0,1,2分别代表对三个摇臂的动作,而每个摇臂对应不同回报,所以服从三个回报,状态s,在本例中较为简单,对某一个摇臂动作,然后返回初始状态,再继续对某一个摇臂动作,再返回初始状态......,循环往复。本例中的评估,基于行为值函数,本质上是对当前动作回报值的计算(期望,也就是摇N次对回报取平均值)。我们需要分别得到三个摇臂的q(q(a1),q(a2),q(a3))。

进而我们看一下实现的过程,假设q0,q1,q2的期望(未知)分别是1,10,6(满足正态分布),初始化时我们对每一个摇臂进行一次实验,分别得到3,4,6个金币,根据贪婪策略(选回报最大动作,也就是摇臂3),连续执行十次,按照期望(正态分布)得到60金币,但如果选择摇臂2,十次后可得到100金币,所以这时贪婪策略就不太合适。所以出现了探索-利用平衡策略,利用就是用当前最好策略,探索就是有一定概率选择其他不那么好的动作。

再看一下伪码和源码的对应关系。

代码中可修改的内容。

用到的三种策略

:简单理解,以摇臂赌博机为例,第一次探索q0=0.2,q1=0.3,q2=0.6,=0.1,此时有0.9的概率继续选择2的动作,有0.1的概率选择1的动作,这就增加的探索能力,假设选择了动作1,立即汇报为1.5,那么q1=0.9,成为最高的回报值,下次有0.9被选择的概率。(比较彼此回报时用的是平均回报)

ucb:分别计算不同动作的累计回报,假设谁大选谁,代表各自动作的平均回报值,假设动作3的平均回报是0.6为最大,但连续选择3次之后,第四次n(动作总次数)变为4,为动作1,2,3各自的次数,那么此时对动作1,2而言较小,n大,所以对应的值会超过动作3,以此实现探索。

bolzman:简单理解是利用概率方式,优先选回报最多的动作,但对回报低的动作也有概率选择。

参考文献

1.深入浅出强化学习 编程实战 郭宪

  1. 博文视点学院
相关推荐
u0103055271 天前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u0103055272 天前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝3 天前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u0103055273 天前
Java图像处理实战指南
人工智能·1024程序员节
u0103055274 天前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u0103055276 天前
Java实用类应用精讲
人工智能·1024程序员节
u0103055277 天前
Java I/O核心操作实战
人工智能·1024程序员节
u0103055278 天前
ArrayList操作详解与实战应用
人工智能·1024程序员节
u0103055278 天前
Java模块化编程实战指南
人工智能·笔记·1024程序员节
u0103055279 天前
使用BufferedReader读取控制台输入
人工智能·1024程序员节