第一篇链接:强化学习入门到不想放弃-1 (qq.com)

      上节课我们用CMU的经典问题,多臂讨论了,无状态物体的探索和利用,这节课我们用走格子来做一下动态规划算法

      上节课的问题,我们完全不知道这些的中奖概率,而这节课我们考虑环境是已知的,说白了,我们可以开启上帝视角,动态规划算法,一般也被定义为有模型的算法

       那么先说问题,假如我有一个人物(不是勇者),在一个地图上奔跑为了得到最终的奖杯,因为不是勇者所以看到哥布林打手就会被揍死,所以必须要走没有哥布林的格子才能拿到奖杯

      现在再给点附加条件玩家初始只有100分,每经过一个格子会扣1分,要求通过强化学习生成一个模型, 从起点到拿到奖杯,分数保留越高越好     

强化学习入门到不想放弃-2_代码块

     1-策略迭代算法 policy-based

     首先我们定义格子函数的不同状态 get_state,以横纵坐标为单位(row,col),然后分别定义出ground(可以走),terminal(奖杯处),be killed(哥布林处)的格子

强化学习入门到不想放弃-2_sed_02

       比如上图0,0处就是一个白地,所以就是ground

       然后我们定义人物咋走格子,move函数

强化学习入门到不想放弃-2_迭代_03

      move函数里传入的action参数就是决定上左下右,让这个任务怎么动,但是别跑出界了,再给价格max和min的限制

      

强化学习入门到不想放弃-2_sed_04

      碰到哥布林人直接就没了,所以就把100分都扣光了,如果走正常的格子的话,就扣1分,为什么要扣,因为数学上要收敛,求出最佳路径,否则上面那3行,人物就随便走了,如图中所示,action给了个0,所以人物要往下一格,从[3,0],走到[2,0]

     策略迭代呢,就是要给上下左右迭代出一个概率走哪边分给的最多,这样好理解吧,我们要迭代出来两个矩阵

1-所有格子的价值,默认是0

2-踩到格子以后我下一步动作的概率(取得最高分的动作),如果只有一个方向那就是1,其他的方向都是0,如果有2个方向相等,那就是[0,0,0.5,0.5]这种了,初始化的动作概率我们就设置上下左右相等,都是0.25即百分之25

强化学习入门到不想放弃-2_代码块_05

      下面的代码块得插讲一个概念:

       Q函数(qsa):没错,就是之前OpenAI打架被传的神乎其神的那个Q函数,我之前还写了一篇文章,RLAIF方法与传说中的函数'Q',揭露OpenAI那不为人知的Qstar计划 (qq.com)

      我们在这里简单把他理解为能串联起reward和action的一个函数就可以了,这个qsa的值肯定是越大越好了,分数多

强化学习入门到不想放弃-2_代码块_06

      我们在qsa函数里第一要考虑当前这个格子我的reward的情况,同时我们还要多考虑一步,这多考虑的一步就是下一个状态我的reward应该是啥样的(上一步定义了values方法,4*12的矩阵,有分别不同的分数)

     然后动作本身和下一个状态的分数,我们做一个加和,其实就是你的现行的environment+action得到的reward

     现在我们开始正式的评估所有格子的分数get_values

强化学习入门到不想放弃-2_迭代_07

       做一个2层的循环,一个循环行,一个循环列,就可以循环出所有的格子,每个格子,又分别有上下左右四个动作,来对应不同的分数,那每个动作的分数也分别要和自己对应的概率(目前的概率4个方向是相等的都是0.25)相乘,最后把和这个格子相关的所有的分数加起来,就是这个各自的分数

强化学习入门到不想放弃-2_迭代_08

上图是所有格子的分数

现在我们开始正式的评估所有格子能得到高分的概率get_pi,因为上一步我们没有考虑到概率的不同,4个方向都是0.25,所以我们在以下的代码块更新概率


强化学习入门到不想放弃-2_sed_09

      这段代码也比较清晰,因为上一步我们不是有value了吗,那我们这一步就看怎么走就能让value最大化,通过max函数求出来它,count=几个动作能得高分,然后1/count,就是就选一个最好的,还是选几个最好的方向概率

     剩下就是循环迭代,也算训练吧,找最优解,我们这里面让value循环100遍,概率循环10遍

强化学习入门到不想放弃-2_代码块_10

      打印一下游戏,为了方便测试,能看出来它怎么走,方块就是ground,圆就是哥布林,❤就是奖杯

强化学习入门到不想放弃-2_代码块_11

      然后就可以测着玩了,直接cololab或者jupyter里看动画,看你的路径是否优化

强化学习入门到不想放弃-2_代码块_12

       然后我们也可以直观的看一下它的路径

强化学习入门到不想放弃-2_sed_13

      基本是按着最优路径走的

2-价值迭代算法 value-based

      唯一不同就在get_value这,不考虑概率就考虑最大值就完了

强化学习入门到不想放弃-2_迭代_14

强化学习入门到不想放弃-2_迭代_15


      目测它的效果比policy based至少在这个demo上要更好

本节完

强化学习入门到不想放弃-2_sed_16