强化学习使用的是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. WiFi万能钥匙 for Macv1.1.0中文版

    wifi万能钥匙 for Mac是一款运行在Mac平台上的免费WiFi热点软件,Mac分享无线流量.管理WiFi连接的必备神器.WiFi万能钥匙Mac版内置千万Wi-Fi热点数据,随时随地轻松接入无线 ...

  2. AutoCompleteExtender 使用示例

    绑定 KeyValuePair,网上很多例子,没有找到绑定键值对的,msdn上有例子,备忘一下. using FirstElite.Verify.Entity; using System; using ...

  3. day-11函数的形参与实参

    形参与实参 参数介绍: 函数为什么要有参数:因为内部的函数体需要外部的数据 怎么定义函数的参数:在定义函数阶段,函数名后面()中来定义函数的参数 怎么使用函数的参数:在函数体中用定义的参数名直接使用 ...

  4. 创建一个dynamics 365 CRM online plugin (九) - Context.Depth

    让我们来看看官方文档是怎么讲的 https://docs.microsoft.com/en-us/previous-versions/dynamicscrm-2016/developers-guide ...

  5. java中构造代码块、方法调用顺序问题

    1. 继承的概念 继承在本职上是特殊——一般的关系,即常说的is-a关系.子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法. 2. 继承中的初始化顺序 从类的结构上而言,其 ...

  6. C 标识符, 数据存储形式(原码,反码,补码)

    一.  标识符 第一个字母必须是英文字母或下划线 二. 数据存储形式(补码存储) 最高位是符号位 ---- 0表示整数 ; 1 表示负数 1. 正数:原码 = 反码 = 补码 例子 : (10) 原码 ...

  7. Python2.X和Python3.X的w7同时安装使用

    一.介绍 Python([ˈpaɪθən])是一种面向对象.解释型计算机程序设计语言.Python语法简洁.清晰,具有丰富和强大的类库. Python源代码遵循GPL(GNU General Publ ...

  8. react连连看

      // Math.floor(t * Math.random()); var isInclude = function (array, element) { let alen = array.len ...

  9. HTML 部分非常用标签

    标签 描述 示例 <!DOCTYPE>  定义文档类型. HTML5 : <!DOCTYPE html> HTML4.* :<!DOCTYPE HTML PUBLIC & ...

  10. 7.10 break.c 程序

    7.10 break.c 程序 #include <stdio.h> int main(void) { float length, width; printf("Enter th ...