主要内容

水箱强化学习环境模型

这个示例展示了如何创建一个水箱强化学习Simulink®环境,其中包含一个RL Agent块,用于代替水箱中水位的控制器。金宝app要模拟此环境,您必须创建一个代理,并在RL代理块中指定该代理。有关使用此环境训练代理的示例,请参见创建Simul金宝appink环境和训练代理

mdl =“rlwatertank”;open_system (mdl)

这个模型已经包含了一个RL代理块,它连接到以下信号:

  • 标量动作输出信号

  • 观测输入信号的矢量

  • 标量奖励输入信号

  • 停止模拟的逻辑输入信号

行动和观察

强化学习环境接收来自智能体的动作信号,并对这些动作生成观察信号。要创建和训练代理,必须创建动作和观察规范对象。

该环境的动作信号是发送到装置的流量控制信号。要为此连续操作信号创建规范对象,请使用rlNumericSpec函数。

actionInfo = rlNumericSpec([1 1]);actionInfo。Name =“流”

如果操作信号采用一组离散的可能值之一,则使用rlFiniteSetSpec函数。

对于这种环境,有三个观察信号被发送到代理,指定为矢量信号。观察向量为 e dt e h T ,地点:

  • h 是水箱中水的高度。

  • e r - h ,在那里 r 是水位高度的参考值。

在生成观测子系统中计算观测信号。

open_system ([mdl' /生成观察'])

创建一个观察规格的三元素向量。指定水高度的下界为0,其他观测信号不受限制。

observationInfo = rlNumericSpec([3 1],...“LowerLimit”,[-inf -inf 0]',...“UpperLimit”,[inf inf inf]');observationInfo。Name =“观察”;observationInfo。描述=积分误差,误差和测量高度

如果操作或观察结果由总线信号表示,则使用bus2RLSpec函数。

奖励的信号

构造一个标量奖励信号。对于本例,指定以下奖励。

奖励 10 | e | < 0 1 - 1 | e | 0 1 - One hundred. h 0 | | h 20.

当误差低于时,奖励为正0.1否则为负。此外,有一个大的奖励惩罚时,水的高度是在020.的范围内。

在计算奖励子系统中构建这个奖励。

open_system ([mdl/计算奖励的])

停止信号

要终止训练集和模拟,请指定逻辑信号到结束块的输入端口。对于本例,如果终止插曲 h 0 h 20.

在停止仿真子系统中计算该信号。

open_system ([mdl“模拟/停止”])

创建环境对象

为Simulink模型创建一个环境对象。金宝app

env = rl金宝appSimulinkEnv(mdl,[mdl .' / RL代理', observationInfo actionInfo);

重置功能

您还可以创建一个自定义重置函数来随机化模型的参数、变量或状态。在本例中,复位函数对参考信号和初始水高进行随机化,并设置相应的块参数。

env。ResetFcn = @ localResetFcn(in);

本地函数

函数in = localResetFcn(in)随机化参考信号BLK = sprintf('rlwatertank/期望水位');H = 3*randn + 10;|| H >= 20 H = 3*randn + 10;结束in = setBlockParameter(in,blk,“价值”num2str (h));随机初始高度H = 3*randn + 10;|| H >= 20 H = 3*randn + 10;结束黑色=“rlwatertank /水箱系统/ H”;in = setBlockParameter(in,blk,“InitialCondition”num2str (h));结束

另请参阅

相关的话题