强化学习5——动态规划在强化学习中的应用

动态规划在强化学习中的应用

基于动态规划的算法优良 :策略迭代价值迭代

策略迭代分为策略评估和策略提升,使用贝尔曼期望方程得到一个策略的状态价值函数;价值迭代直接使用贝尔曼最优方程进行动态规划,得到最终的最优状态价值。

基于动态规划的算法需要知道环境的状态转移函数奖励函数,不需要通过智能体与环境的大量交互中学习,直接用动态规划求解状态价值函数,只适用于有限马尔可夫决策过程,即状态空间和动作空间是离散且有限的。

悬崖漫步环境

与上一节介绍的算法题类似,要求智能体从起点出发,避开悬崖,走到终点,且智能体无法越过边界。智能体走到悬崖,或者到达目标时,结束动作并回到起点。智能体每个状态可以采取四种动作:上下左右,智能体每走一步的奖励是 −1,掉入悬崖的奖励是 −100。

image.png

我们使用代码,定义一个4×12的环境

import copy
class CliffWalkingEnv:def __init__(self, ncol=12,nrow=3):self.ncol = ncolself.nrow = nrow# 转移矩阵P[state][action] = [(p, next_state, reward, done)]包含下一个状态和奖励self.P=self.createP()def createP(self):# 初始化,每一个动作对应四个值P=[[[] for j in range(4) ] for i in range(self.ncol*self.nrow)]# 定义四种动作,一次为上下左右,坐标系原点为(0,0),定义在左上角# 向下、向右是正数,向左、向上为负数change=[[0,-1],[0,1],[-1,0],[1,0]]for i in range(self.nrow):for j in range(self.ncol):# 对上下左右进行遍历for a in range(4):# 掉到悬崖或者到达终点,无法继续交互,动作的奖励为0# 定义最下面的一行是悬崖,右下角为终点,其余行都是地面# 左下角为起点if i==self.nrow -1 and j>0:# 如果为3行,那么i=2,i*self.ncol+j表示智能体所在的位置# 相当于将棋盘格展开成一条线,下标为i*self.ncol+j# 下一个状态还是本位置P[i*self.ncol+j][a]=[(1,i*self.ncol+j,0,True)]continue# 其他位置# max(0,j+change[a][0])是为了防止越界,防止下一个位置小于0# 如果判断为越界,则取0# min(self.ncol-1,max(0,j+change[a][0]))# 防止数值大于self.ncol-1,如果大于self.ncol-1,则取self.ncol-1nextX=min(self.ncol-1,max(0,j+change[a][0]))nextY=min(self.nrow-1,max(0,i+change[a][1]))nextState=nextY*self.ncol+nextXreward=-1done=False# 下一个位置在悬崖或者终点if nextY==self.nrow-1 and nextX>0:done = True#如果下一个位置不是终点(即是悬崖)if nextX != self.ncol-1:reward = -100P[i*self.ncol+j][a]=[(1,nextState,reward,done)]return P

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/603755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 一文掌握使用AddListener方法为组件事件添加监听器的方法

在Unity中,很多组件都带有事件,比如: Button组件:onClick() Toggle组件:On Value Changed(Boolean) Dropdown组件:On Value Changed(Int32) InputField组件:On Value Changed(String)、On End Edit(Stri…

CCC数字钥匙设计【NFC】--NFC通信之APDU TLV

CCC3.0,包含NFC、BLE、UWB技术。当采用NFC通信时,车端与手机端是通过APDU来进行交互的。而在APDU中的data数据段,又可能会嵌入TLV协议的数据,以完成车端与手机端的通信交互。 本文先介绍APDU及TLV的一些基础知识,再通…

断更后的故事1

文章目录 技术男为何开始写感悟博客?简单的自我介绍为什么断更了默默进化的日子琐碎的事情对阶段1的思索和总结 技术男为何开始写感悟博客? 其实我是一个偏感性的一个技术男,可能这样就有点违背技术男这个定义了,很多时候还是挺理…

全连接网络、卷积神经网络、递归神经网络 通俗的解释

全连接网络、卷积神经网络和递归神经网络是三种不同类型的神经网络,它们在结构和应用上有所不同。下面我将尽量用通俗易懂的语言来解释和对比这三种神经网络。 1.全连接网络 全连接网络是一种最常见的神经网络类型,它的每一层都由许多神经元组成&#…

SSH 密钥身份验证和管理

安全外壳协议(Security Shell Protocol)是一种应用于计算机网络的安全通信协议,其提供的服务可用于保护网络上的连接和数据传输安全性,其核心思想是为网络上的两台计算机之间搭建一个安全的外壳,以保护数据传输的安全性…

简单介绍Java 的内存泄漏

java最明显的一个优势就是它的内存管理机制。你只需简单创建对象,java的垃圾回收机制负责分配和释放内存。然而情况并不像想像的那么简单,因为在Java应用中经常发生内存泄漏。 本教程演示了什么是内存泄漏,为什么会发生内存泄漏以及如何预防…

2、C语言:控制流

控制流 语句:在表达式后面加上分号,构成语句。 程序块:用一对花括号“{”与“}”把一组声明和语句括在一起就构成了一个复合语句。复合语句在语法上等同于单条语句。 if-else语句else-if语句:从上到下依次执行,等同于…

视频云存储/视频智能分析平台EasyCVR在麒麟系统中无法启动该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

【docker】网络模式管理

目录 一、Docker网络实现原理 二、Docker的网络模式 1、host模式 1.1 host模式原理 1.2 host模式实操 2、Container模式 2.2 container模式实操 3、none模式 4、bridger模式 4.1 bridge模式的原理 4.2 bridge实操 5、overlay模式 6、自定义网络模式 6.1 为什么需要…

017、使用包、单元包及模块来管理日渐复杂的项目

在编写较为复杂的项目时,合理地对代码进行组织与管理很重要,因为我们不太可能记住代码中所有的细枝末节。只有按照不同的特性来组织或分割相关功能的代码,我们才能够清晰地找到实现指定功能的代码片段,或确定哪些地方需要修改。 到…

【UML】第14篇 协作图

目录 一、协作图的概述 二、协作图的主要构成 2.1 对象 2.2 消息 2.3 链 三、协作图如何画 3.1 思路 3.2 步骤 这个系列暂停了好几天了,适当时候再恢复一下。 UML非常经典,只要在这个行业,代码可能不会写一辈子,但是图肯定…

Java socket编程学习笔记

一、初步了解 1、简易代码(存在socket提前关闭问题) 服务端代码: import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.nio.charset.StandardCharsets;public class MySocketServer {public static void main(String[] args) throws IOEx…

js判断是否为数字的方法

找到一个比较好用的方法,记录下来,方便以后使用查找 function isNumber(value) {return !isNaN(parseFloat(value)) && isFinite(value); }目前测试情况: isNumber(123) —> true isNumber(12.3) —> true isNumber(-12.3) —…

阿里2面:万亿级消息,如何做存储设计?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、shein 希音、百度、网易的面试资格,小伙伴在面阿里时,遇到了一个存储设计相关的面试题: 存储架构,…

Ubuntu 虚拟机挂接 Windows 目录

Windows 共享目录 首先 Windows 下共享目录 我这里偷懒直接直接 Everyone ,也可以指定用户啥的 Ubuntu 挂接 挂接命令,类似如下: sudo mount -o usernamefananchong,passwordxxxx,uid1000,gid1000,file_mode0644,dir_mode0755,dynperm //…

leetcode09-机器人能否返回原点

题目链接: https://leetcode.cn/problems/robot-return-to-origin/?envTypestudy-plan-v2&envIdprogramming-skills 思路: 循环遍历,模拟即可 代码: class Solution {public boolean judgeCircle(String moves) {int n m…

5.云原生安全之kubesphere应用网关配置域名TLS证书

文章目录 cloudflare配置使用cloudflare托管域名获取cloudflare API Token在cloudflare中配置SSL/TLS kubesphere使用cert-manager申请cloudflare证书安装证书管理器创建Secret资源创建cluster-issuer.yaml创建cert.yaml申请证书已经查看申请状态 部署harbor并配置ingress使用证…

C++中的面向对象重点总结

面向对象的三大特性 封装 封装是将数据和操作这些数据的函数(方法)组合在一个类中的过程。 封装的主要目的是隐藏类的内部实现细节,仅暴露必要的接口给外部,通过控制类成员的访问级别,可以限制对类内部数据的直接访…

【面试】Redis基础知识

题目 为什么Redis是单线程却性能很高? Redis是一个高性能的基于内存的键值存储系统。它之所以能够达到高性能,主要有以下几个原因: 基于内存:Redis将数据存储在内存中,而不是硬盘上,这使得数据的读写速度…

回首2023,期待2024!

2023,在改变中到来 2023年1月1日,我从成都冷清的学校回到了哈尔滨的老家,开始了保研之前的最后一个寒假 当时的目标是将之前的科研理论转化为实际,生产出一篇sci,助力保研加分 星移斗转,事与愿违&#x…