主要内容

rlSimulinkEnv

使用动态模型创建强化学习环境动态仿真模块

描述

rlSimulinkEnv函数从Simulink创建一个强化学习环境对象®模型。环境对象充当接口,因此当您调用sim卡火车,这些函数依次调用Simulink模型为智能体生成经验。

例子

env= rlSimulinkEnv (mdlagentBlocks创建强化学习环境对象env用于Simulink模型mdlagentBlocks中包含到一个或多个强化学习代理块的路径mdl.如果使用此语法,每个代理块必须引用MATLAB中已经存在的代理对象®工作区。

例子

env= rlSimulinkEnv (mdlagentBlocksobsInfoactInfo创建强化学习环境对象env对于模型mdl.这两个单元格数组obsInfo而且actInfo必须包含每个代理块的观察和操作规范mdl,与它们出现的顺序相同agentBlocks

env= rlSimulinkEnv (___“UseFastRestart”,fastRestartToggle创建一个强化学习环境对象env并额外支持快速重启。在前面语法中的任何输入参数之后使用此语法。

例子

全部折叠

控件中使用训练过的代理和相应的Simulink模型创建Simulink环境创建Simulink环境和训练代理的例子。

在MATLAB®工作区中加载代理。

负载rlWaterTankDDPGAgent

创建一个环境rlwatertank模型,它包含一个RL代理块。由于块使用的代理已经在工作空间中,您不需要传递观察和操作规范来创建环境。

环境= rlSimulinkEnv(“rlwatertank”“rlwatertank / RL代理”
env = SimulinkEnvWithAgent with properties: Model: rlwatertank AgentBlock: rlwatertank/RL Agent ResetFcn: [] UseFastRestart: on

通过执行两次简短的模拟来验证环境。

validateEnvironment (env)

您现在可以在环境中使用火车而且sim卡,分别。

对于本例,考虑rlSimplePendulumModel仿真软件模型。模型是一个简单的无摩擦摆,最初悬挂在一个向下的位置。

打开模型。

mdl =“rlSimplePendulumModel”;open_system (mdl)

创建rlNumericSpec而且rlFiniteSetSpec对象分别用于观察和操作信息。

观测值是一个包含三个信号的向量:角度的正弦、余弦和时间导数。

obsInfo = rlNumericSpec([3 1])
obsInfo = rlNumericSpec with properties: LowerLimit: -Inf UpperLimit: Inf名称:[0×0 string]描述:[0×0 string]维度:[3 1]DataType: "double"

动作是表示扭矩的标量,可以是三个可能值之一,-2海里,0纳米和2Nm。

rlFiniteSetSpec([-2 0 2])
actInfo = rlFiniteSetSpec with properties:元素:[3×1 double]名称:[0×0 string]描述:[0×0 string]维度:[1 1]数据类型:"double"

属性的属性值可以使用点表示法rlNumericSpec而且rlFiniteSetSpec对象。

obsInfo。Name =“观察”;actInfo。Name =“扭矩”

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

agentBlk = [mdl .' / RL代理'];env = rlSimulinkEnv(mdl,agentBlk,obsInfo,actInfo)
env = SimulinkEnvWithAgent with properties: Model: rlSimplePendulumModel AgentBlock: rlSimplePendulumModel/RL Agent ResetFcn: [] UseFastRestart: on

您还可以使用点表示法包含一个重置函数。对于本例,随机初始化theta0在模型工作区中。

env。ResetFcn = @(in) setVariable(in,“theta0”randn,“工作区”mdl)
env = SimulinkEnvWithAgent with properties: Model: rlSimplePendulumModel AgentBlock: rlSimplePendulumModel/RL Agent ResetFcn: @(in)setVariable(in,'theta0',randn,'Workspace',mdl) UseFastRestart: on

根据示例为Simulink模型创建一个环境训练多智能体执行协同任务

在MATLAB工作区中加载代理。

负载rlCollaborativeTaskAgents

创建一个环境rlCollaborativeTask模型,它有两个代理块。由于两个块使用的代理(agentA而且agentB)已经在工作空间中,您不需要通过它们的观察和操作规范来创建环境。

环境= rlSimulinkEnv(...“rlCollaborativeTask”...“rlCollaborativeTask /代理”“B rlCollaborativeTask /代理”])
env = SimulinkEnvWithAgent with properties: Model: rlCollaborativeTask AgentBlock: [rlCollaborativeTask/Agent A rlCollaborativeTask/Agent B] ResetFcn: [] UseFastRestart: on

您现在可以在环境中使用sim卡火车,分别。

输入参数

全部折叠

Simulink模型名称,指定为字符串或字符向量。该模型必须至少包含一个RL代理块。

代理块路径,指定为字符串、字符向量或字符串数组。

如果mdl包含一个RL代理块,指定agentBlocks作为包含块路径的字符串或字符向量。

如果mdl包含多个RL代理块,指定agentBlocks作为字符串数组,其中每个元素包含一个代理块的路径。

mdl可以包含RL代理中未包含路径的块agentBlocks.这样的代理块作为环境的一部分,根据它们当前的策略选择操作。当你打电话时sim卡火车时,这些代理的经验不会返回,它们的策略也不会更新。

MATLAB环境不支持多代理仿真。

代理块可以在模型引用的内部。有关配置用于强化学习的代理块的详细信息,请参见RL代理

观察信息,指定为规范对象、规范对象数组或单元格数组。

如果mdl包含单个代理块,指定obsInfo作为一个rlNumericSpec对象,一个rlFiniteSetSpec对象,或包含这些对象的混合的数组。

如果mdl包含多个代理块,指定obsInfo作为单元格数组,其中每个单元格包含一个规范对象或中对应块的规范对象数组agentBlocks

有关更多信息,请参见getObservationInfo

操作信息,指定为规范对象或单元格数组。

如果mdl包含单个代理块,指定actInfo作为一个rlNumericSpecrlFiniteSetSpec对象。

如果mdl包含多个代理块,指定actInfo作为单元格数组,其中每个单元格包含中对应块的规范对象agentBlocks

有关更多信息,请参见getActionInfo

选项,用于切换快速重启,指定为任意一个“上”“关闭”.快速重新启动允许您执行迭代模拟,而无需每次编译模型或终止模拟。

有关快速重新启动的详细信息,请参见快速重启如何改进迭代模拟(模型)

输出参数

全部折叠

强化学习环境,回归做人SimulinkEnvWithAgent对象。

有关强化学习环境的更多信息,请参见创建Simulink强化学习环境

版本历史

在R2019a中引入

Baidu
map