当前位置: 首页 > news >正文

强化学习入门(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

相关文章:

  • [TCP] TCP/IP 基础知识词典(2)
  • Putty中运行matlab文件
  • 短剧小程序系统,重塑视频观看体验的科技革命
  • 【Linux】用户与用户组,用户账号系统文件
  • 全球游戏市场回暖,Flat Ads推动海外获客增长
  • gin源码实战 day2
  • 【GPTs分享】每日GPTs分享之Canva
  • 【Git】:标签功能
  • 【JVM】垃圾回收算法
  • Unity2023.1.19_ShaderGraph节点说明以及使用技巧
  • kafka和ZK的关系
  • Apache Camel定时任务
  • 跳槽前应该做好哪些准备?
  • Redis 缓存(Cache)
  • 全栈笔记_工具篇(nvm免安装版自动配置,无需手动设置环境变量)
  • 2017届校招提前批面试回顾
  • Android框架之Volley
  • CentOS6 编译安装 redis-3.2.3
  • cookie和session
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Joomla 2.x, 3.x useful code cheatsheet
  • Map集合、散列表、红黑树介绍
  • ng6--错误信息小结(持续更新)
  • Node项目之评分系统(二)- 数据库设计
  • Spark RDD学习: aggregate函数
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Webpack 4 学习01(基础配置)
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 从零开始学习部署
  • 爬虫模拟登陆 SegmentFault
  • 前端学习笔记之观察者模式
  • 三栏布局总结
  • 微信小程序实战练习(仿五洲到家微信版)
  • 原生JS动态加载JS、CSS文件及代码脚本
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (过滤器)Filter和(监听器)listener
  • (生成器)yield与(迭代器)generator
  • (十八)SpringBoot之发送QQ邮件
  • (一)appium-desktop定位元素原理
  • (一)基于IDEA的JAVA基础1
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • @RunWith注解作用
  • @WebService和@WebMethod注解的用法
  • @拔赤:Web前端开发十日谈