强化学习使用的是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已经不发生改变,跳出循环

第四步:构造policy判断当前位置的移动方向

第一步:初始化policy矩阵,矩阵的大小为16, 4

第二步:循环16次,调用one_step_look_head(s, V) V 已经训练好,获得A,四个方向的奖励值

第三步:使用np.argmax()获得最大位置的索引值

第四步:将最大位置的索引值赋值为1

第五步:返回policy

第五步:调用valueiteration(env), 获得policy, 使用np.reshape(np.argmax(policy, axis=1), env.shpae)  将policy转换为数字类型的

from Nine_Bouding抄写.gridworld import GridworldEnv
import numpy as np # 获得GridwordEnv()的类
env = GridworldEnv() # 第一步:定义valueiteration函数,输入为env,theta迭代结束的阈值,discount_factor表示奖励的惩罚值
def valueiteration(env, theta=0.001, discount_factor=1.0): # 第二步:构建one_step_look_head用于计算当前位置四个方向的奖励值
def one_step_look_head(state, v):
# 初始化四个方向的奖励值
A = np.zeros(env.nA)
# 循环a = 0, 1, 2, 3
for a in range(env.nA):
# 获得当前位置对应方向的prob概率,next_state,下一个方向的位置,reward及时奖励,done是否到达出口
for prob, next_state, reward, done in env.P[state][a]:
# 使用prob * (及时奖励 + 下一个位置的奖励)获得当前位置方向的奖励值
A[a] += prob * (reward + discount_factor * v[next_state])
# 返回当前位置四个方向的奖励值
return A
# 第三步:不断循环获得奖励值矩阵V # 初始化奖励值V
V = np.zeros(env.nS)
# 循环
while True:
# 初始化差值
delta = 0
# 循环16次,即一圈
for s in range(env.nS):
# 调用one_step_look_head获得当前位置4个方向的奖励值
A = one_step_look_head(s, V)
# 使用np.max获得最大的奖励值
max_action = np.max(A)
# 使用当前方向最大的奖励值 - 当前的奖励值
delta = max(delta, np.abs(max_action - V[s]))
# 把当前方向最大的奖励值赋值给当前的奖励值
V[s] = max_action
# 循环16次以后, 如果差值小于theta,就跳出循环
if delta < theta:
break
# 第四步:定义位置的策略值,用于获得每个位置的方向
policy = np.zeros((env.nS, env.nA))
# 循环16次
for s in range(env.nS):
# 获得当前位置每个方向的奖励值
A = one_step_look_head(s, V)
# 获得最大方向的奖励值的索引
max_action = np.argmax(A)
# 将决策的最大索引赋值为1
policy[s, max_action] = 1
# 返回决策值
return policy # 第五步:调用valueiteration获得policy
policy = valueiteration(env)
print(policy)
# 将policy使用索引值来替换
policy_to_index = np.reshape(np.argmax(policy, axis=1), env.shape)
print(policy_to_index)

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

  1. 深度学习实践-强化学习-bird游戏 1.np.stack(表示进行拼接操作) 2.cv2.resize(进行图像的压缩操作) 3.cv2.cvtColor(进行图片颜色的转换) 4.cv2.threshold(进行图片的二值化操作) 5.random.sample(样本的随机抽取)

    1. np.stack((x_t, x_t, x_t, x_t), axis=2)  将图片进行串接的操作,使得图片的维度为[80, 80, 4] 参数说明: (x_t, x_t, x_t, x_t) ...

  2. AI小白必读:深度学习、迁移学习、强化学习别再傻傻分不清

    摘要:诸多关于人工智能的流行词汇萦绕在我们耳边,比如深度学习 (Deep Learning).强化学习 (Reinforcement Learning).迁移学习 (Transfer Learning ...

  3. 深度学习之强化学习Q-Learning

    1.知识点 """ 1.强化学习:学习系统没有像很多其他形式的机器学习方法一样被告知应该做什么行为, 必须在尝试之后才能发现哪些行为会导致奖励的最大化,当前的行为可能不仅 ...

  4. 深度强化学习中稀疏奖励问题Sparse Reward

    Sparse Reward 推荐资料 <深度强化学习中稀疏奖励问题研究综述>1 李宏毅深度强化学习Sparse Reward4 ​ 强化学习算法在被引入深度神经网络后,对大量样本的需求更加 ...

  5. 深度强化学习(DRL)专栏(一)

    目录: 1. 引言 专栏知识结构 从AlphaGo看深度强化学习 2. 强化学习基础知识 强化学习问题 马尔科夫决策过程 最优价值函数和贝尔曼方程 3. 有模型的强化学习方法 价值迭代 策略迭代 4. ...

  6. (转) 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文)

    本文转自:http://mp.weixin.qq.com/s/aAHbybdbs_GtY8OyU6h5WA 专题 | 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文) 原创 201 ...

  7. 深度强化学习day01初探强化学习

    深度强化学习 基本概念 强化学习 强化学习(Reinforcement Learning)是机器学习的一个重要的分支,主要用来解决连续决策的问题.强化学习可以在复杂的.不确定的环境中学习如何实现我们设 ...

  8. 5G网络的深度强化学习:联合波束成形,功率控制和干扰协调

    摘要:第五代无线通信(5G)支持大幅增加流量和数据速率,并提高语音呼叫的可靠性.在5G无线网络中共同优化波束成形,功率控制和干扰协调以增强最终用户的通信性能是一项重大挑战.在本文中,我们制定波束形成, ...

  9. 深度强化学习(DRL)专栏开篇

    2015年,DeepMind团队在Nature杂志上发表了一篇文章名为"Human-level control through deep reinforcement learning&quo ...

随机推荐

  1. Scrapy 原理

    Scrapy 原理 一.原理 scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架.可以应用在包括数据挖掘,信息处理或存储历史数据等一系列程序中. 二.工作流程 Scrapy Engi ...

  2. Scrapy 代理IP

    Scrapy 代理IP 一.Scarpy使用代理IP 1.在setting.py 配置 代理服务器IP 2.在middlermares.py 配置 downloadmiddlermare(下载中间件) ...

  3. C++ 状态机接口

    最近的状态极差,甚至代码也写不下去了.给自己手臂上的两刀没有任何的作用,看来早已经是麻痹了. 一直想弄一个勉强能用的状态机,用于在各种涉及到状态转换的时候用到,然而脑子并不是太清醒. 先放在这里一个接 ...

  4. 20175202 《Java程序设计》第五周学习总结

    20175209 2018-2019-2 <Java程序设计>第五周学习总结 教材知识点总结 1.接口声明: 使用关键字interface来定义接口. 定义接口时使用关键字interfac ...

  5. AR图像识别 AR识别图像 AR摄像头识别 外包开发 AR识别应用开发就找北京动点软件

    当绝大多数手机厂商还在追求后置双摄拍照的时候,已经有人开始潜心研究AR手机了.刚刚结束的美国消费电子展上,华硕发布了全新的ZenFone AR手机,配备5.7英寸2K屏.骁龙821处理器.8GB内存, ...

  6. 【转】Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置

    Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置 原贴:https://www.cnblogs.com/jackadam/p/8568833.html ...

  7. 解决spyder、Jupyter Notebook 打不开

    参考: https://blog.csdn.net/lanchunhui/article/details/72891918 https://stackoverflow.com/questions/49 ...

  8. RTP实时传输协议

    RTP协议是包括一对协议:RTP和RTCP. RTP传输数据,RTCP传输控制信息. 一般基于UDP,RTP使用偶数端口,RTCP使用下一个奇数端口. 层次关系: APP -> RTP -> ...

  9. Nginx的编译安装及选项

    编译安装Nginx1.安装常见的工具和库(GCC.PCRE.zlib.OpenSSL) Nginx是一个由C语言编写的,所以需要一个编译工具如GNU的GCC[root@www ~]# yum inst ...

  10. Azkaban各种类型的Job编写

    一.概述 原生的 Azkaban 支持的plugin类型有以下这些: command:Linux shell命令行任务 gobblin:通用数据采集工具 hadoopJava:运行hadoopMR任务 ...