深度学习实战-强化学习-九宫格 当前奖励值 = 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已经不发生改变,跳出循环
第四步:构造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(及时奖励 + 下一个位置的奖励值 * 奖励衰减)的更多相关文章
- 深度学习实践-强化学习-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) ...
- AI小白必读:深度学习、迁移学习、强化学习别再傻傻分不清
摘要:诸多关于人工智能的流行词汇萦绕在我们耳边,比如深度学习 (Deep Learning).强化学习 (Reinforcement Learning).迁移学习 (Transfer Learning ...
- 深度学习之强化学习Q-Learning
1.知识点 """ 1.强化学习:学习系统没有像很多其他形式的机器学习方法一样被告知应该做什么行为, 必须在尝试之后才能发现哪些行为会导致奖励的最大化,当前的行为可能不仅 ...
- 深度强化学习中稀疏奖励问题Sparse Reward
Sparse Reward 推荐资料 <深度强化学习中稀疏奖励问题研究综述>1 李宏毅深度强化学习Sparse Reward4 强化学习算法在被引入深度神经网络后,对大量样本的需求更加 ...
- 深度强化学习(DRL)专栏(一)
目录: 1. 引言 专栏知识结构 从AlphaGo看深度强化学习 2. 强化学习基础知识 强化学习问题 马尔科夫决策过程 最优价值函数和贝尔曼方程 3. 有模型的强化学习方法 价值迭代 策略迭代 4. ...
- (转) 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文)
本文转自:http://mp.weixin.qq.com/s/aAHbybdbs_GtY8OyU6h5WA 专题 | 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文) 原创 201 ...
- 深度强化学习day01初探强化学习
深度强化学习 基本概念 强化学习 强化学习(Reinforcement Learning)是机器学习的一个重要的分支,主要用来解决连续决策的问题.强化学习可以在复杂的.不确定的环境中学习如何实现我们设 ...
- 5G网络的深度强化学习:联合波束成形,功率控制和干扰协调
摘要:第五代无线通信(5G)支持大幅增加流量和数据速率,并提高语音呼叫的可靠性.在5G无线网络中共同优化波束成形,功率控制和干扰协调以增强最终用户的通信性能是一项重大挑战.在本文中,我们制定波束形成, ...
- 深度强化学习(DRL)专栏开篇
2015年,DeepMind团队在Nature杂志上发表了一篇文章名为"Human-level control through deep reinforcement learning&quo ...
随机推荐
- sourceforge.net安装网站程序数据库相关
sourceforge.net安装网站程序数据库相关 我们应该知道sourceforge.net是可以安装网站(当做一个虚拟空间使用的) 但是在安装cms程序的时候那时的数据库地址再填写“localh ...
- cifX使用心得
一.注意事项: 1.xChannelIORead()第一次读取到数据是空的.2.系统安装cifX驱动之前一定先安装有uio模块和libpciaccess库:建议系统内核为3.X.X版本,测试版本为3. ...
- 用js简单实现一下迪克斯特拉算法
今天看书看到了迪克斯特拉算法,大概用js实现一下呢,计算最短路径. 首先,迪克斯特拉算法只适用于有向无环图,且没有负权重,本例关系图如下哦,数字为权重,emmmm,画得稍微有点丑~ //大概用js实现 ...
- C++跨平台集成websocketpp
之前给公司写了一个用于消息交互的服务器,移植到Linux上之后发现H5-Websocket模块经常出问题,而该模块是另一位已经离职同事编写的,所以修改和维护都存在一定的困难,索性就直接把这个模块替换掉 ...
- 使用LNMP架构部署动态网站环境(源代码安装)
- layui 表格组件不能访问连续的属性的解决办法
table.js里第741行改成这样,它这里只能访问一级属性// var content = item1[field]; 不能访问对象内的对象,比如item1.depart.name,只能访问一级属性 ...
- java8_api_格式化数据
格式化数据1 Locale类 格式化日期时间 格式化数字 Locale类,主要是国际化相关 该类代表语言环境 实例化: ...
- 关于jeesite的陷阱需要注意
jeesite,其框架主要为: 后端 核心框架:Spring Framework 4.0 安全框架:Apache Shiro 1.2 视图框架:Spring MVC 4.0 服务端验证:Hiberna ...
- 重置SQLSERVER表的自增列,让自增列重新计数
SQL的自增列挺好用,只是开发过程中一旦删除数据,标识列就不连续了 写起来 也很郁闷,所以查阅了一下标识列重置的方法 发现可以分为三种: --- 删除原表数据,并重置自增列truncate table ...
- python列表的基础操作
Operation Result Trans x in s True if an item of s is equal to x, else False x值是否在s列表中 x not in s Fa ...