深度学习实战-强化学习-九宫格 当前奖励值 = 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 ...
随机推荐
- c# 公元转农历
void Main() { ,,); GetLunarDisplay(date).Dump(); } public List<string> GetLunarYearList() { va ...
- Ansible 之动态Inventory文件(二)
上篇主要讲解了Ansible 的安装和配置,并且根据不同的业务场景将服务器的信息存放在Ansible的Inventory中,其实存放这样的数据每次更新都需要我们自动的添加和删除,这样对于我们维护起来很 ...
- CAFFE在win10+VS2017下的安装笔记
老版的caffe在BVLC的github上已经找不到,如果要想下载老版caffe可以下载微软的caffe版本:https://github.com/Microsoft/caffe 网上的大多安装caf ...
- 1、IT人思维之投资开篇 - IT人思维之投资
在IT圈中,很多人的认识就只在于工作中获取收益,这个观点是狭隘的,本身就不符合投资领域的内容.所以,在工作之余,笔者就对投资领域的内容进行的分析和收集整理相关的投资方面的内容,一方面对笔者自己的投资方 ...
- 记一个在移动端调试 web 页面的方法
1. 工具:Weinre 2. 安装:npm -g install weinre | npm install weinre -g --registry=https://registry.npm.tao ...
- Excel与Google Sheets中实现线性规划求解
很久没更新过APS系列文章了,这段时间项目工作确实非常紧,所以只能抽点时间学习一下运筹学的入门知识,算是为以后的APS项目积累点基础.看了一些运筹学的书(都是科普级别的)发现原来我目前面对的很多排产. ...
- react连连看
// Math.floor(t * Math.random()); var isInclude = function (array, element) { let alen = array.len ...
- .net 超长URL请求返回404错误-解决方法
<system.webServer> <security> <requestFiltering> <requestLimits maxQueryString= ...
- JAVA Override和Overload的含义去区别
java中的继承,方法覆盖(重写)override与方法的重载overload的区别 1.方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现,重写(Overr ...
- 使用SimpleDateFormat类来实现时间跟字符串的转化
使用Date和SimpleDateFormat类表示时间 1.Date类 需要处理日期和时间的相关数据时可以使用 java.util 包中的 Date 类,这个类最主要的作用就是获取当前时间.下面看看 ...