目录
1 前言
本文介绍如何基于MATLAB创建和修改模板环境类,自定义强化学习环境。
Custom Template Environment:
1、实施更为复杂的环境动态;
2、添加自定义可视化;
3、创建以C + +、Java或Python等语言定义的第三方库的接口。
2 根据类模板创建自定义环境
2.1 创建类模板
首先创建类模板文件,指定类的名字:
rlCreateEnvTemplate("MyEnvironment")
函数rlCreateEnvTemplate创建并打开类模板文件。类模板是rl.env.MATLABEnvironment抽象类的一个子类。该抽象类与其他MATLAB强化学习环境对象使用的抽象类相同。
classdef MyEnvironment < rl.env.MATLABEnvironment
默认情况下,模板类实现了一个简单的车-杆平衡模型。
为了定义环境动态,将文件保存为MyEnvironment.m。然后对模板类的以下内容进行修改:
1、Environment properties
2、Required environment methods
3、Optional environment methods
2.2 Environment properties(环境特性)
在模板的属性部分,指定创建和模拟环境所需的任何参数。这些参数可以包括:
参数 | 描述 |
---|---|
物理常数 | 如重力加速度 |
环境几何属性 | 如物体质量、长度、体积等 |
环境约束 | 如车-杆环境中杆角和车距的阈值约束,以用来检测episode结束条件 |
评估环境所需的变量 | 如车-杆环境中定义的状态向量( State )和指示episode结束的标志( IsDone ) |
定义动作或观察空间的常量 | 如车-杆环境中定义的动作空间最大力( MaxForce ) |
计算奖赏信号的常数 | 如车-杆环境中定义的常数RewardForNotFalling和PenaltyForFalling |
properties
% 指定并初始化环境的必要属性
% Acceleration due to gravity in m/s^2
Gravity = 9.8
% Mass of the cart
CartMass = 1.0
% Mass of the pole
PoleMass = 0.1
% Half the length of the pole
HalfPoleLength = 0.5
% Max force the input can apply
MaxForce = 10
% Sample time
Ts = 0.02
% Angle at which to fail the episode (radians)
AngleThreshold = 12 * pi/180
% Distance at which to fail the episode
DisplacementThreshold = 2.4
% Reward each time step the cart-pole is balanced
RewardForNotFalling = 1
% Penalty when the cart-pole fails to balance
PenaltyForFalling = -10
end
properties
% 初始化系统状态 [x,dx,theta,dtheta]'
State = zeros(4,1)
end
properties(Access = protected)
% 初始化指示episode终止的内部标志,
IsDone = false
end
2.3 Required Functions(需要的环境方法)
强化学习环境需要定义以下函数:
函数 | 描述 |
---|---|
getObservationInfo | 返回有关环境观测的信息 |
getActionInfo | 返回有关环境行为的信息 |
sim | 使用智能体仿真环境 |
validateEnvironment | 通过调用reset函数对环境进行验证,并使用step对环境进行一个时间步的仿真 |
reset | 初始化环境状态并清理任何可视化 |
step | 施加一个动作,在环境仿真一步,输出观察结果和奖励;同时,标志位指示episode是否结束 |
Constructor function | 与创建类实例的类名相同的函数 |
其中getObservationInfo, getActionInfo, sim,和validateEnvironment函数已在基础抽象类中定义。必须要自定义的函数是constructor, reset, and step。
2.3.1 Constructor function(构造函数)
以车-杆环境为例,其构造函数是:
- 定义动作和观测规范。
- 调用基抽象类的构造函数。
% 自定义构造函数可以有输入参数
function this = MyEnvironment()
% 初始化观测
ObservationInfo = rlNumericSpec([4 1]);
ObservationInfo.Name = 'Ca