深度学习实战-强化学习-九宫格 当前奖励值 = 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 ...
随机推荐
- BigData_Jia
#include <stdio.h> #include <string.h> #define MaxSize 10000 int n1, n2, i, k, times; ch ...
- head first c初探网络编程上
server连接网络四部曲. 为了与外界沟通,c程序用数据流读写字节,比較经常使用的数据流有标准输入.标准输出.文件等. 假设想写一个与网络通信的程序.就须要一种新的数据流----------套接字. ...
- Java之Java7新特性之try资源句式
一.原来写法: static String readFirstLineFromFile(String path) throws IOException { BufferedReader br = nu ...
- 使用命令查看 Laravel 的版本
进入项目根目录文件夹后,进入命令行,输入命令: php artisan --version 或者输入: php artisan 会出现 artisan 的帮助文档,最上面就是 laravel 的版本号
- 未能加载文件或程序集“SuperMap.Mapping, Version=7.0.0.0, Culture=neutral, PublicKeyToken=0635c574ea890381”或它的某一个依赖项。试图加载格式不正确的程序。
开发SuperMap.Mapping的时候,蹦出来的错误!让人摸不着头脑.查找原因如下: (1)安装32位的super map iobject后,进行开发,vs上选择目标平台是x86位的,然后从控件列 ...
- Mxd文档更新比例尺
在AE中,更新Mxd文档的比例尺,比较特殊.写代码以记录,更新比例尺代码如图所示: [DllImport("User32.dll")] public static extern i ...
- 安装rpm
剩余 gcc-c++-3.4.6-3.1.x86_64.rpm elfutils-libelf-devel-0.97-5.x86_64.rpm glibc-2.3.4-2.41.x86_64.rpm ...
- 提取配置文件中无注释的内容方法--findstr
findstr /v /r # nginx.conf C:\Users\Liang>findstr /?在文件中寻找字符串. FINDSTR [/B] [/E] [/L] [/R] [/S] [ ...
- 【C++】智能指针简单剖析
转自 http://www.cnblogs.com/lanxuezaipiao/p/4132096.html 导读 最近在补看<C++ Primer Plus>第六版,这的确是本好书,其中 ...
- 京东饭粒捡漏V1.0.7
20180614 更新 V1.0.71.修改捡漏策略 功能介绍1.京东商城专用,支持饭粒模式下单,自己获得京豆返利 2.捡漏模式:帮助用户监控抢购商品,有库存的时候进行抢单,主要是通过添加商品ID - ...