MATLAB强化学习工具箱(九)为强化学习环境创建连续或离散的[action observation]规范

连续的[action observation]规范

rlNumericSpec对象指定用于强化学习环境的连续动作或观察数据规范。

语法

spec = rlNumericSpec(dimension)
spec = rlNumericSpec(dimension,Name,Value)

描述

spec = rlNumericSpec(dimension)
为连续操作或观察创建数据规范,并设置维度属性。

spec = rlNumericSpec(dimension,Name,Value)
使用名称-值对参数设置属性。

性能

LowerLimit — Lower limit of the data space
‘-inf’ (default) | scalar | matrix

数据空间的下限,指定为与数据空间大小相同的标量或矩阵。 将LowerLimit指定为标量时,rlNumericSpec会将其应用于数据空间中的所有条目。

UpperLimit — Upper limit of the data space
‘inf’ (default) | scalar | matrix

数据空间的上限,指定为与数据空间大小相同的标量或矩阵。 将UpperLimit指定为标量时,rlNumericSpec会将其应用于数据空间中的所有条目。

Name — Name of the rlNumericSpec object
string (default)

扫描二维码关注公众号,回复: 12845713 查看本文章

rlNumericSpec对象的名称,指定为字符串。

Dimension — Dimension of the data space
numeric vector (default)

该属性是只读的。
数据空间的维数,指定为数字向量。

DataType — Information about the type of data
string (default)

该属性是只读的。
有关数据类型的信息,以字符串形式指定。

对象函数

函数 功能
rlSimulinkEnv 使用Simulink中实现的动态模型创建强化学习环境
rlFunctionEnv 使用功能指定自定义强化学习环境动态
rlRepresentation (不建议)强化学习智能体的模型表示

示例 Simulink模型的强化学习环境

对于此示例,请考虑rlSimplePendulumModel Simulink模型。 该模型是一个简单的无摩擦摆,最初悬挂在向下的位置。

打开模型

mdl = 'rlSimplePendulumModel';
open_system(mdl)

分别创建rlNumericSpec和rlFiniteSetSpec对象。

obsInfo = rlNumericSpec([3 1]) % vector of 3 observations: sin(theta), cos(theta), d(theta)/dt

在这里插入图片描述

actInfo = rlFiniteSetSpec([-2 0 2]) % 3 possible values for torque: -2 Nm, 0 Nm and 2 Nm

在这里插入图片描述
您可以使用点表示法为rlNumericSpec和rlFiniteSetSpec对象分配属性值。

obsInfo.Name = 'observations';
actInfo.Name = 'torque';

分配智能体程序块路径信息,并使用前面步骤中提取的信息为Simulink模型创建强化学习环境。

agentBlk = [mdl '/RL Agent'];
env = rlSimulinkEnv(mdl,agentBlk,obsInfo,actInfo)

在这里插入图片描述
您还可以包括使用点符号的复位功能。 对于此示例,在模型工作区中随机初始化theta0。

env.ResetFcn = @(in) setVariable(in,'theta0',randn,'Workspace',mdl)

在这里插入图片描述

离散的[action observation]规范

rlFiniteSetSpec对象指定用于强化学习环境的离散操作或观察数据规范。

语法

spec = rlFiniteSetSpec(elements)

描述

spec = rlFiniteSetSpec(elements)创建具有一组离散动作或观察值的数据规范,并设置Elements属性。

性能

Elements — Set of valid actions or observations
vector | cell array

针对环境的一组有效操作或观察,指定为以下之一:

  1. 向量—为单个动作或单个观察值指定有效的数值。

  2. 单元格数组—当您进行多个操作或观察时,请指定有效的数值组合。单元阵列的每个条目必须具有相同的尺寸。

Name — Name of the rlFiniteSetSpec object
string (default)

rlFiniteSetSpec对象的名称,指定为字符串。 使用此属性可以为有限集设置一个有意义的名称。

Description — Description of the rlFiniteSetSpec object
string (default)

rlFiniteSetSpec对象的描述,指定为字符串。 使用此属性可以对有限设置值进行有意义的描述。

Dimension — Size of each element
vector (default)

  1. 此属性是只读的。

  2. 每个元素的大小,指定为向量。

  3. 如果指定Elements为向量, Dimension则为[1 1]。否则,如果指定单元格数组,则在中Dimension指示条目的大小 Elements。

DataType — Information about the type of data
string (default)

  1. 此属性是只读的。

  2. 有关数据类型的信息,以字符串形式指定。

对象函数

函数 功能
rlSimulinkEnv 使用Simulink中实现的动态模型创建强化学习环境
rlFunctionEnv 使用功能指定自定义强化学习环境动态
rlRepresentation (不建议)强化学习智能体的模型表示

实例 Simulink模型的强化学习环境

对于此示例,请考虑rlSimplePendulumModel Simulink模型。 该模型是一个简单的无摩擦摆,最初悬挂在向下的位置。

打开模型。

mdl = 'rlSimplePendulumModel';
open_system(mdl)

分别创建rlNumericSpec和rlFiniteSetSpec对象。

obsInfo = rlNumericSpec([3 1]) % vector of 3 observations: sin(theta), cos(theta), d(theta)/dt

在这里插入图片描述

actInfo = rlFiniteSetSpec([-2 0 2]) % 3 possible values for torque: -2 Nm, 0 Nm and 2 Nm

在这里插入图片描述
您可以使用点表示法为rlNumericSpec和rlFiniteSetSpec对象分配属性值。

obsInfo.Name = 'observations';
actInfo.Name = 'torque';

分配智能体程序块路径信息,并使用前面步骤中提取的信息为Simulink模型创建强化学习环境。

agentBlk = [mdl '/RL Agent'];
env = rlSimulinkEnv(mdl,agentBlk,obsInfo,actInfo)

在这里插入图片描述
您还可以包括使用点符号的复位功能。 对于此示例,在模型工作区中随机初始化theta0。

env.ResetFcn = @(in) setVariable(in,'theta0',randn,'Workspace',mdl)

在这里插入图片描述

指定多个操作的离散值集

如果您的强化学习智能体的actor有多个输出,每个输出都有一个离散的动作空间,则可以使用rlFiniteSetSpec对象指定可能的离散动作组合。

假设双输出系统的有效值为第一个输出为[1 2],第二个输出为[10 20 30]。 为所有可能的输入组合创建离散的动作空间规范。

actionSpec = rlFiniteSetSpec({
    
    [1 10],[1 20],[1 30],...
                              [2 10],[2 20],[2 30]})

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wangyifan123456zz/article/details/109501783