强化学习入门(Matlab2021b)-创建环境【2】

2024-02-21 07:20

本文主要是介绍强化学习入门(Matlab2021b)-创建环境【2】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1 前言
  • 2 利用step和reset函数创建自定义环境
    • 2.1 对象描述
    • 2.2 reset函数
    • 2.3 step函数
    • 2.3 构建自定义环境
  • 3 使用匿名函数传递额外的参数
  • 4 可视化检查自定义函数的输出
  • 参考链接

1 前言

本文介绍如何基于MATLAB编写step、reset函数,创建自己的强化学习环境(Environment)。

使用 rlFunctionEnv 函数,可以根据观察(observation)规范、动作(action)规范和自己创建的step、reset函数创建 MATLAB 强化学习环境,并可以在此环境中训练强化学习智能体(agent)。

对于更复杂的环境,可以使用模板类创建环境对象。

2 利用step和reset函数创建自定义环境

2.1 对象描述

以平衡车摆系统为例。
在这里插入图片描述

强化学习环境:小车上装有可自由转动的杆,小车沿着一条无摩擦的轨道移动。

训练目标:控制小车,使杆保持向上直立而不摔倒。

环境描述:

  1. 杆向上平衡位置为0弧度,向下悬垂位置为pi弧度。
  2. 杆以-0.05至0.05弧度之间的初始角度开始直立。
  3. Agent对环境的力作用信号为-0~10 N。
  4. 环境观测量为小车的位置和速度、关节角和角速度。
  5. 如果杆与竖直方向的夹角大于12°,或者大车与原位置的距离大于2.4m,则episode终止,见上图绿色虚线。
  6. 对杆保持直立的每一个时间步给予+ 1的奖励。当杆摔倒时,施加- 5的惩罚。

环境的observation:小车位置、小车速度、杆摆角以及摆角速度。
环境的离散action:智能体可以对小车施加力值(-10或10 N)。

2.2 reset函数

reset函数设置了环境的初始状态:

[InitialObservation,Info] = myResetFunction()
% InitialObservation:初始观测值;
% Info:从当前步传递到下一步的环境信息,如环境状态,参数等。

在训练的episode开始时,train调用reset函数,并使用输出信息Info初始化自定义环境的Info属性。在一个训练步中,train提供当前Info的值作为StepFcn的第2个输入参数,然后使用StepFcn返回的第4个输出参数来更新Info的值。

Info存储车-杆环境的初始状态信息:小车位置、小车速度、杆摆角以及摆角速度。
reset函数在每次环境复位时将小车角度设置为随机值。

对于本算例,使用第二个参数存储车-杆环境的初始状态:小车的位置和速度、摆角以及摆角导数。复位函数在每次环境复位时将杆角度设置为随机值。

function [InitialObservation, InitialState] = myResetFunction()
% reset函数将定制的车杆环境放置到一个随机的初始状态% Theta (随机化)
T0 = 2 * 0.05 * rand() - 0.05;
% Thetadot
Td0 = 0;
% X
X0 = 0;
% Xdot
Xd0 = 0;% 返回初始环境状态变量作为记录信号
InitialState = [X0;Xd0;T0;Td0];
InitialObservation = InitialState;end

2.3 step函数

step函数指定环境如何根据给定的动作推进到下一个状态:

[NextObservation,Reward,IsDone,UpdatedInfo] = myStepFunction(Action,Info)
% NextObservation:下一步的观测值
% Reward:奖励
% IsDone:是否结束
% UpdatedInfo:更新状态Info

在下一个训练步中,train将上一步得到的UpdatedInfo作为step函数的输入变量Info。

step函数中定义了物理常数。另一种方法是在reset函数中定义物理常数,将Info定义为一个包含状态和参数的结构体,即使用Info来存储物理常数和环境状态。

function [NextObs,Reward,IsDone,NextState] = myStepFunction(Action,State)
% 自定义step函数
% 该函数将给定的action应用到环境中,并评估一个仿真步的系统动态。% 定义环境常数。
% 重力加速度 m/s^2
Gravity = 9.8;
% 车质量
CartMass = 1.0;
% 杆质量
PoleMass = 0.1;
% 杆长的一半
HalfPoleLength = 0.5;
% 最大施加力
MaxForce = 10;
% Sample time
Ts = 0.02;
% episode失败阈值:杆偏角极限值
AngleThreshold = 12 * pi

这篇关于强化学习入门(Matlab2021b)-创建环境【2】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/730976

相关文章

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

MySQL 临时表创建与使用详细说明

《MySQL临时表创建与使用详细说明》MySQL临时表是存储在内存或磁盘的临时数据表,会话结束时自动销毁,适合存储中间计算结果或临时数据集,其名称以#开头(如#TempTable),本文给大家介绍M... 目录mysql 临时表详细说明1.定义2.核心特性3.创建与使用4.典型应用场景5.生命周期管理6.注

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c