13. 强化学习编程实验1-在格子世界中寻宝(1)

文章目录

  • 1.实验目的
  • 2.任务描述
  • 3.任务分析
    • 3.1 待求问题是多步决策问题否
    • 3.2 问题求解过程是一个马尔科夫决策过程
    • 3.3 状态空间S的确定
    • 3.4 动作空间A的确定
    • 3.5 状态转移概率P的确定
    • 3.6 立即回报R的确定
    • 3.7 折扣 γ \gamma γ的确定
  • 4. 编程架构
    • 4.1 程序中有哪些对象和类
    • 4.2 环境类的设计
    • 4.3 智能体类的设计

1.实验目的

  • 了解强化学习算法的基本框架;
  • 掌握策略迭代算法的编程技术;
  • 掌握值迭代算法的编程技术;
  • 理解策略迭代与值迭代的异同;

2.任务描述

有一个网格,它是1个含有 n n n n n n列单元格的方阵,方阵中的单元格 ( i , j ) (i,j) (i,j)(第 i + 1 i+1 i+1行,第 j + 1 j+1 j+1列, 0 ≤ i , j ≤ n − 1 0\le i,j\le n-1 0i,jn1)有宝藏,有1个智能体,当前所处的位置为 ( a , b ) (a,b) (a,b), 0 ≤ a , b ≤ n − 1 0\le a,b\le n-1 0a,bn1,该智能体可上下左右移动,每次只能从其当前单元格移动1步,到达与当前单元格相邻的单元格(若当前单元格处于方阵边缘,且智能体移动时超出方阵范围,则智能体只能回到当前单元格)。该智能体一开始不知道宝藏的准确位置,也不知道网格边界有多大,它只能观测到其当前位置和当前位置是否为宝藏所在处,并从上下左右移动四个行为空间中选取1个动作,选取该动作后转向的下一个网格由环境决定。请你设计一套算法,为该智能体找出最优移动方向序列,使得该智能体能以最短的时间找到宝藏。
在这里插入图片描述
要求:
程序运行时,输入方阵行、列数 n n n、宝藏位置 ( i , j ) (i,j) (i,j)、智能体当前位置 ( a , b ) (a,b) (a,b),即可按如下格式显示出规划好最优行为序列:
左→右→右→左→ ⋯ \cdots
并以可视化的方式显示出路径。

3.任务分析

任务分析要回答以下问题:

  • 待求解的问题是多步决策问题否?若不是,则不宜采用强化学习算法解决,若是,则继续回答下述问题
  • 环境是什么?环境的状态具有马尔科夫性吗?是否涉及行为选择?如果回答是,则继续确定如下问题答案
  • 环境的状态如何表示?环境的状态空间是什么?智能体的行为(动作)如何表示,智能体的行为空间是什么?环境的状态转移函数如何表示?环境的立即回报如何表示?

3.1 待求问题是多步决策问题否

智能体每一步都需要作出行为选择(向上、右、下还是向左移动),因此,这是一个多步决策问题。

3.2 问题求解过程是一个马尔科夫决策过程

智能体每走一步前,要确定选取何种移动方向(行为),智能体未来的位置与当前位置有关,与历史位置无关,所以满足马尔科夫性。智能体每一步都需要作出行为选择,因此,这是一个多步决策问题。智能体在当前状态下找到宝藏,就能得到1个立即回报,找不到回报就为0。我们希望从当前位置位置开始尽早找到宝藏,这说明找到宝藏所需的步骤越多,得到的回报打的折扣越多)。
故而:- 上述问题可以用马尔科夫决策模型 < S , A , P , R , γ > <S,A,P,R,\gamma> <S,A,P,R,γ>描述

3.3 状态空间S的确定

这个环境是1个网格世界,由于智能体以找到宝藏为目标,而能否在智能体作出一个行为响应(上下作用移动1步)后找到宝藏,与智能体所处位置有关,因此,智能体所处位置可以看做是环境的状态,状态决定了其能否在下一步找到宝藏。
为此,需要1个量描述该状态,有两种描述方法:
(1)用整数对 ( a , b ) (a,b) (a,b)联合描述状态,a,b分别对应单元格的行、列索引号;
(2)用1个整数描述状态,该整数 z z z和单元格所在的行索引号 a a a、列索引号 b b b满足如下关系:
z = n a + b a = z / / n b = z − n a \begin{align*} z&=na+b\\ a&=z//n\\ b&=z-na \end{align*} zab=na+b=z//n=zna
/ / ‾ − \underline{//}- //整除求商
本任务选择方法2描述状态,则
S = { 0 , 1 , 2 , ⋯ , n 2 − 1 } S=\{0,1,2,\cdots,n^2-1\} S={0,1,2,,n21}
S t = k S_t=k St=k:智能体当前位置为从上至下,从左至右计数的第 k + 1 k+1 k+1个单元格

3.4 动作空间A的确定

A = { 0 , 1 , 2 , 3 } A=\{0,1,2,3\} A={0,1,2,3}:0~3依次表示向上、向右、向下、向左移动1步

3.5 状态转移概率P的确定

在给定状态s和行为a下,状态转移到其他每个状态(包括自身)的概率都是确定的,只有1个为1,其他为0。
例如,当单元格当前位置处于方阵中间时,采取动作A[0],转移到上方相邻单元格的概率就是1,转移到其他相邻单元格的概率就是0,采取其他动作转到下一个状态的概率,情况都类似;当单元格当前位置处于方阵边缘时,如左边缘时,向左移动,后续状态将保持为原先状态。
综上所述,状态转移概率可以通过一个函数实现。

3.6 立即回报R的确定

很显然,只要某个状态不是最终状态(宝藏所在处),立即回报都可以设为0,反之,立即回报设为1,也可以把宝藏所在处状态设为0,其他位置对应的状态立即回报设为-1。总之,要确保当智能体找到宝藏时,获得的立即回报值高于未找到宝藏时状态的立即回报,而且,只要没有找到宝藏,立即回报都应该是一样的。

本实验中,当智能体所处位置不是宝藏所在处,立即回报设为-1,反之,设为0。

3.7 折扣 γ \gamma γ的确定

本实验设 γ = 1 \gamma = 1 γ=1
问题:设为1表示未来回报都不打折,这样能评估越早找到宝藏越好这一要求吗?
答案:可以。
证明:
假设从当前时间步 t t t(当前时间步的立即回报不算)开始,到第 K K K步找到宝藏,则累积回报为:
G t = ∑ k = 0 K − 1 γ k R t + k + 1 G_t=\sum_{k=0}^{K-1}\gamma^kR_{t+k+1} Gt=k=0K1γkRt+k+1
γ = 1 , R t + m = { − 1 0 < m < K 0 m = K \gamma =1,R_{t+m}=\begin{cases} -1\quad 0<m<K\\ 0 \quad m=K \end{cases} γ=1,Rt+m={10<m<K0m=K代入上式,得
G t = R t + 1 + ⋯ + R t + K = 1 − K G_t=R_{t+1}+\cdots+R_{t+K}=1-K Gt=Rt+1++Rt+K=1K
可见,找到宝藏的时间越长,即K越大,累积回报 G t G_t Gt越小,因此,当立即回报按照上式取值,且 γ = 1 \gamma =1 γ=1时,能累积回报能反映越早找到宝藏越好的需求。
思考:若 R t + m = { 0 0 < m < K 1 m = K R_{t+m}=\begin{cases} 0\quad 0<m<K\\ 1 \quad m=K \end{cases} Rt+m={00<m<K1m=K,即找到宝藏时,立即回报为1,没有找到立即回报为0,此时,还能取 γ = 1 \gamma =1 γ=1吗?为什么不能?

4. 编程架构

本实验涉及到的程序的设计,采用面向对象架构。
为此,首先分析,程序运行中,有哪些对象?这些对象属于哪些类?然后定义类,最后在主程序中创建类对象,调用对象方法,解决问题。

4.1 程序中有哪些对象和类

根据强化学习原理,可知,在强化学习环境中,有两个最基本的对象,分别为:

  • 环境
  • 智能体

4.2 环境类的设计

本程序中的环境对象为格子世界,我给它命名为:GridWorld
很显然,单独为这个具体的环境对象设计一个具体类,通用性不足,因为还有其他的具体类(对应其他的环境),这类环境都可以用马尔科夫决策过程描述,即:它们都需要向用户提供几个
重要的方法:
get_state_space:返回状态空间
get_action_space:返回行为空间
get_state_trans_prob:返回状态转移概率
get_immediate_return:返回立即回报期望
get_gamma:返回折扣系数
因此,完全可以先定义一个描述马尔科夫决策过程(MDP)的抽象类MdpEnv,GridWorld继承自该抽象类,实现该抽象类的方法即可,以后若是有其他的MDP具体环境,只需要实现这些方法即可。

4.3 智能体类的设计

对于马尔科夫决策过程,智能体都需要通过环境的已知信息,即MDP五元组 < S , A , P , R , γ > <S,A,P,R,\gamma> <S,A,P,R,γ>,学到最优策略 π ( a ∣ s ) \pi(a|s) π(as),因此,各种算法(智能体)都有一个共同的抽象类:MdpAgent
它应该提供方法:

  • learn:学习MdpEnv环境对象,并返回优化的策略
  • find_optimum_action:根据当前状态,基于当前学到的策略,输出最优动作

策略迭代算法和值迭代算法,都可以看做是智能体,它们都从MdpAgent派生,只需要实现以上抽象方法即可。

好了,接下来就是发挥主动能动性,根据上述基本设计思想实现python程序了。暂时写到这里…

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

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

相关文章

深入理解Word Embeddings:Word2Vec技术与应用

目录 前言1 Word2Vec概述2 CBOW模型2.1 CBOW模型简介2.2 基于词袋&#xff08;bag of word&#xff09;的假设2.3 One-hot向量编码2.4 分类问题 3 Skip-gram模型3.1 Skip-gram模型简介3.2 目标词预测上下文3.3 词语关联性的捕捉 4 优化Word2Vec模型的方法4.1 负采样和分层softm…

MyBatis-Plus框架学习笔记

先赞后看&#xff0c;养成习惯&#xff01;&#xff01;&#xff01;❤️ ❤️ ❤️ 文章码字不易&#xff0c;如果喜欢可以关注我哦&#xff01; ​如果本篇内容对你有所启发&#xff0c;欢迎访问我的个人博客了解更多内容&#xff1a;链接地址 MyBatisPlus &#xff08;简称…

获取线程池中任务执行数量

获取线程池中任务执行数量 通过线程池进行任务处理&#xff0c;有时我们需要知道线程池中任务的执行状态。通过ThreadPoolExecutor的相关API实时获取线程数量&#xff0c;排队任务数量&#xff0c;执行完成线程数量等信息。 实例 private static ExecutorService es new Thr…

Spring Boot 生产就绪中文文档-下

本文为官方文档直译版本。原文链接 由于篇幅较长&#xff0c;遂分两篇。上半部分中文文档 Spring Boot 生产就绪中文文档-下 度量标准入门受支持的监控系统AppOpticsAtlasDatadogDynatracev2 API自动配置手动配置 v1 API (旧版)与版本无关的设置 ElasticGangliaGraphiteHumioIn…

AUTOSAR从入门到精通-漫谈autosar软件架构(五)

目录 前言 原理 Autosar软件架构 BSW层中的四个分层 虚拟功能总线VFB及运行环境RTE

推荐几个免费的HTTP接口Mock网站和工具

在前后端分离开发架构下&#xff0c;经常遇到调用后端数据API接口进行测试、集成、联调等需求&#xff0c;比如&#xff1a; &#xff08;1&#xff09;前端开发人员很快开发完成了UI界面&#xff0c;但后端开发人员的API接口还没有完成&#xff0c;不能进行前后端数据接口对接…

Java内存泄漏问题分析

内存泄漏也是一个老八股文了&#xff0c;下面来看看实际项目中内存泄漏的场景分析 时间回到9月某一天 分析阶段一 现象&#xff1a;在当时各种请求在那段时间响应很慢&#xff0c;特别是 kafka异步消费线程 不足点&#xff1a;当时主业务基本不可用&#xff0c;有点急&#…

线特征_LSD直线检测算法和LBD直线描述子

目录 1. 线特征简介 2. LSD直线检测算法 3. LBD直线描述算法 主要参考:2022 硕士论文 南京邮电大学 点线融合的单目语义视觉SLAM 郭强 1. 线特征简介 线特征优点: 线特征在于具有天然的光照及视角不变性,同时更高级的特征也使追踪的鲁棒性和准确性有所提高。特别是在特…

负责任的人工智能与人机环境系统智能

负责任的人工智能是指在人工智能系统的设计、开发、管理、使用和维护过程中&#xff0c;所有相关的角色&#xff08;包括设计者、开发者、管理者、使用者、维护者等等&#xff09;都承担其行为的道义、法律和社会责任。这意味着这些角色需要确保人工智能系统的设计与使用符合伦…

Mathtype7.4安装与嵌入WPS

文章目录 Mathtype安装教程&#xff08;7.4&#xff09;Mathtype简介Mathtype下载安装软件下载软件安装运行MathType.exe运行注册表 Mathtype嵌入wps Mathtype安装教程&#xff08;7.4&#xff09; Mathtype简介 MathType是一款强大的数学公式编辑器&#xff0c;适用于教育教…

mysql之数据类型、建表以及约束

目录 一. CRUD 1.1 什么是crud 1.2 select(查询) 1.3 INSERT(新增) 1.4 UPDATE(修改&#xff09; 1.5 DELETE(删除) 二. 函数 2.1 常见函数 2.2 流程控制函数 2.3聚合函数 三. union与union all 3.1 union 3.2 union all 3.3 具体不同 3.4 结论 四、思维导图 一. CRUD 1.1…

七、HTML 文本格式化

一、HTML 文本格式化 加粗文本斜体文本电脑自动输出 这是 下标 和 上标 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>HTML文本格式化</title> </head><body><b>加粗文本</b><br>…

计算机网络——应用层(1)

计算机网络——应用层&#xff08;1&#xff09; 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 协议原理内容原理小结体系结构分类——重点已标注 进程通信常见形式 因特网运输服务TCP&#xff08;传输控制协议&#xff09;UDP&#xff08;用户数据报协议&#xff09;…

简易机器学习笔记(十)Windows下 PaddlePaddle配置CUDA加速环境

前言 大伙既然都来做这个了&#xff0c;那配个CUDA环境肯定是必不可少的了吧&#xff08;笑&#xff09; 最前面的最前面&#xff0c; 流程 确定当前设备支持的CUDA版本安装CUDA Toolkit 和 GPU版的Paddlepaddle下载cuDNN Archive手动放置配套的cuDNN到指定文件夹测试 1.确…

kubectl命令中常用的缩写

在kubectl的学习中&#xff0c;经常见到一些缩写&#xff0c;干脆整理一番&#xff0c;统一学习更加方便记忆。 一览表 简称全称中文释义举例nsnamespace命名空间kubectl get namespace 等价于 kubectl get ns-A--all-namespaces全部命名空间kubectl get pods --all-namespac…

机械配件移动商城课程概述

项目介绍 开发准备 任务 开源库介绍 框架搭建 工具类

Mac上安装 Node.js 的版本管理工具 n,以及 n 使用,的使用

安装 最近刚更换 Mac 本进行项目的开发&#xff0c;刚上手 Mac 本还不是很熟练&#xff0c;需要安装 Node.js 的包管理工具 在 Windows 上我是实用的 nvm 来管理的 Node 版本&#xff0c;但是我尝试下载 Nvm &#xff0c;发现下载安装后的 Nvm 无法使用&#xff0c;提示 “Th…

性能优化-OpenMP基础教程(五)-全面讲解OpenMP基本编程方法

本文主要介绍OpenMP编程的编程要素和实战&#xff0c;包括并行域管理详细实战、任务分担详细实战。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础教程 &#x1f380;C…

宏基因组序列分析工具EukRep

文章&#xff1a;Genome-reconstruction for eukaryotes from complex natural microbial communities | bioRxiv 仓库&#xff1a;patrickwest/EukRep: Classification of Eukaryotic and Prokaryotic sequences from metagenomic datasets (github.com) 推荐使用conda进行安…

开启Android学习之旅-3-Android Activity

Android Activity 本文总结《第一行代码 Android》第3版的内容 环境&#xff1a; Android Studio Giraffe | 2022.3.1 Patch 3 Activity 是什么&#xff1f; Activity 简单将就是UI界面&#xff0c;包含两部分 Activity 类 和应用布局文件&#xff0c;如果是 Compose 则另说&…