深度学习实战-强化学习-九宫格 当前奖励值 = max(及时奖励 + 下一个位置的奖励值 * 奖励衰减)...

强化学习使用的是bellmen方程,即当前奖励值 = max(当前位置的及时奖励 + discout_factor * 下一个方向的奖励值)   discount_factor表示奖励的衰减因子

使用的是预先制造好的九宫格的类

代码说明:

     env.nA,即每个位置的下一个方向的个数为4 

     env.nS 表示九宫格的大小为16

     env.P[state][a] 表示九宫格对应位置的方向,返回的是prob概率, next_state下一个位置,reward及时奖励, done是够到达出口

     env.shape 表示九宫格的形状,4*4

 

代码:

     第一步:定义总的函数valueiteration, 输入参数为env, theta=0.0001变化的阈值, discout_factor=1.0奖励的衰减值 

     第二步:定义one_step_look_head() 用于计算当前位置的往四个方向的奖励值, 输入为当前位置state, v奖励值矩阵

                    第一步:初始化A, A的大小为np.zeros(env.nA)

                    第二步:循环range(4), for prob, next_state, reward, done in env.P[state][a] 来获得对应的概率值,下一个方向的位置,reward及时奖励值,done是否到达终点

                    第三步:使用A[a] += prob * (reward + discount_factor * v[next_state]) 来获得四个方向的奖励值,返回奖励值

      第三步:进行循环操作,不断更新V,直到V的变化小于theta,即跳出循环

                     第一步:使用np.zeros(env.nS) 初始化V矩阵

                     第二步:不断循环env.nS,即循环16次 s,delta = 0

                     第三步: 调用one_step_look_head(s, V) 获得当前位置的各方向奖励值A 

                     第四步: 使用np.max获得最大的奖励值,将最大奖励值 - 当前位置V的奖励值,使用max取较大值

                     第五步:循环16次后, 如果max获得的较大值比theta要小,即V已经不发生改变,跳出循环 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值