当前位置:   article > 正文

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

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

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:从当前步传递到下一步的环境信息,如环境状态,参数等。
  • 1
  • 2
  • 3

在训练的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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

2.3 step函数

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

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

在下一个训练步中,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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号