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程序了。暂时写到这里…

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python中的@abstractmethod

abstractmethod 是 Python 中 abc 模块&#xff08;Abstract Base Classes&#xff09;提供的一个装饰器&#xff0c;用于声明抽象方法。抽象方法是指在抽象类中声明但没有提供具体实现的方法&#xff0c;而是由其子类提供具体实现。 使用 abstractmethod 装饰器可以使得子类在…

ES -极客学习

Elasticsearch 简介及其发展历史 起源 Lucene 于 Java 语言开发的搜索引擎库类创建于 1999 年&#xff0c;2005 年成为 Apache 顶级开源项目Lucene 具有高性能、易扩展的优点Lucene 的局限性 只能基于 Java 语言开发类库的接口学习曲线陡峭原生并不支持水平扩展原生并不支持水…

TypeScript 从入门到进阶之基础篇(三) 元组类型篇

系列文章目录 TypeScript 从入门到进阶系列 TypeScript 从入门到进阶之基础篇(一) ts基础类型篇TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇TypeScript 从入门到进阶之基础篇(三) 元组类型篇TypeScript 从入门到进阶之基础篇(四) symbol类型篇 持续更新中… 文章目录 …

【编译原理】期末预习PPT后三章笔记+LL(1) II

继续预习O.o 从这一章开始看自己班发的 PPT 了 LL(1)的部分因为班里发了所以又看了一遍hhh感觉比之前那个清楚一点 目录 I. 自顶向下 一、概念&#xff08;看一眼&#xff09; 1、语法分析的两大类分析方法 2、算法基本思想 3、自顶向下介绍 1&#xff09;一般过程 2&a…

初识大数据,一文掌握大数据必备知识文集(12)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

求实创新 不断探索 浙江移动基于亚信科技AntDB数据库率先完成CRM系统全域改造

12日20日&#xff0c;中国信息通信研究院&#xff08;简称&#xff1a;信通院&#xff09;和中国通信标准化协会大数据库技术推进委员会&#xff08;CCSA TC601&#xff09;共同组织的2023年大数据库“星河&#xff08;Galaxy&#xff09;”案例评选结果发布。中国移动通信集团…

k8s声明式资源管理

三种常见的项目发布方式 1、蓝绿发布 2、金丝雀发布&#xff08;灰度发布&#xff09; 3、滚动发布 应用程序升级&#xff0c;面临的最大的问题是新旧业务之间的切换&#xff0c;立项-----定稿------需求发布-----开发------测试------发布&#xff0c;测试之后上线&#x…

YOLOv5改进 | Neck篇 | 利用Damo-YOLO的RepGFPN改进特征融合层

一、本文介绍 本文给大家带来的改进机制是Damo-YOLO的RepGFPN(重参数化泛化特征金字塔网络),利用其优化YOLOv5的Neck部分,可以在不影响计算量的同时大幅度涨点(亲测在小目标和大目标检测的数据集上效果均表现良好涨点幅度超级高!)。RepGFPN不同于以往提出的改进模块,其…

2024CISA开门红,凌晨通过

祝各位新年快乐&#xff0c;万事顺遂 听说最近it内审有很多甲方开始裁员&#xff0c;为了防止波及到各位&#xff0c;想必各位也在考虑考取证书提高自己的权重&#xff0c;就算后面波及到了自己&#xff0c;去换工作的时候也会快人一步 但是大家都知道&#xff0c;最近都忙得…

HIL(硬件在环)技术汇总梳理

HIL&#xff08;Hardware-in-the-Loop&#xff09;测试领域的知名公司有dSPACE、NI、Vector和speedgoat等&#xff0c;以下是针对这几家HIL技术的对比分析&#xff1a; 文章目录 dSPACE NI Vector speedgoat 总结 dSPACE dSPACE成立于1988年&#xff0c;起源自德国的帕德…

神经网络-搭建小实战和Sequential的使用

CIFAR-10 model structure 通过已知参数&#xff08;高、宽、dilation1、kernel_size&#xff09;推断stride和padding的大小 网络 import torch from torch import nnclass Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()self.conv1 nn.Conv2d(in_chan…

WIN10-22H2专业版万人装机系统镜像

站长亲自封装的电脑维修人员专用装机系统镜像&#xff0c;系统干净无广告&#xff0c;稳定长效不卡顿&#xff0c;适合电脑维修店用来维修电脑重装系统。此版本是WIN10系统里非常稳定的正式版本之一&#xff0c;适合在维修电脑时重装系统或者大批量装机使用。本次封装镜像使用全…

YOLOv8独家原创改进:提出一种新的Shape IoU,更加关注边界框本身的形状和尺度,对小目标检测也很友好 | 2023.12.29收录

💡💡💡本文改进:一种新的Shape IoU方法,该方法可以通过关注边界框本身的形状和尺度来计算损失,解决边界盒的形状和规模等固有属性对边界盒回归的影响。 💡💡💡对小目标检测涨点明显,在VisDrone2019、PASCAL VOC均有涨点 收录 YOLOv8原创自研 https://blog.cs…

【2023 CCF 大数据与计算智能大赛】基于TPU平台实现超分辨率重建模型部署 基于Real-ESRGAN的TPU超分模型部署

2023 CCF 大数据与计算智能大赛 《基于TPU平台实现超分辨率重建模型部署》 洋洋很棒 李鹏飞 算法工程师 中国-烟台 2155477673qq.com 团队简介 本人从事工业、互联网场景传统图像算法及深度学习算法开发、部署工作。其中端侧算法开发及部署工作5年时间。 摘要 本文是…

IPv6有状态地址自动配置(DHCPv6)

IPv6有状态地址自动配置 IPv6实现了对无状态地址自动配置的支持。这种不需要特殊服务器的地址自动配置方式有着极大的好处。使用起来也很方便,而在IPv4时代曾经是地址自动分配的首选方式的DHCP好像显得有些没落了。但是,DHCP作为有状态地址自动配置的方式之一,依旧有着无状…

【STM32】RTC实时时钟

1 unix时间戳 Unix 时间戳&#xff08;Unix Timestamp&#xff09;定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数&#xff0c;不考虑闰秒 时间戳存储在一个秒计数器中&#xff0c;秒计数器为32位/64位的整型变量 世界上所有时区的秒计数器相同&#xff0c;不同时区…

虚幻UE 材质-边界混合之PDO像素深度偏移量

2024年的第一天&#xff01;&#xff01;&#xff01;大家新年快乐&#xff01;&#xff01;&#xff01; 可能是长大了才知道 当你过得一般 你的亲朋好友对你真正态度只可能是没有表露出来的冷嘲热讽了 希望大家新的一年平安、幸福、 永远活力满满地追求自己所想做的、爱做的&…

Unix操作系统的前世今生

Unix是一种多用户、多任务操作系统&#xff0c;最初由AT&T贝尔实验室的肯汤普逊&#xff08;Ken Thompson&#xff09;和丹尼斯里奇&#xff08;Dennis Ritchie&#xff09;等人开发于上世纪70年代初。它被设计成一种通用的操作系统&#xff0c;支持跨多种硬件平台&#xf…

开发经验:代码编译、打包正常,运行提示包不存在

天天提交代码&#xff0c;合并代码。经常会发生&#xff0c;代码提交过后&#xff0c;本地的代码跑不起来的情况出现。遇到脾气好点的同事会仔细检查检查下&#xff0c;是否是自己的环境出现的问题&#xff0c;遇到脾气不好的同事&#xff0c;直接就开喷了。怎么每次你一提交代…

C++: 求1+2+3+...+n

int i 1; int sum 0; class Sum { public:Sum(){sum i;i;} };class Solution { public:int Sum_Solution(int n) {Sum a[n]; //调用n次sum的构造函数return sum;} };