水箱强化学习环境模型
这个示例展示了如何创建一个水箱强化学习Simulink®环境,其中包含一个RL Agent块,用于代替水箱中水位的控制器。金宝app要模拟此环境,您必须创建一个代理,并在RL代理块中指定该代理。有关使用此环境训练代理的示例,请参见创建Simul金宝appink环境和训练代理.
mdl =“rlwatertank”;open_system (mdl)
这个模型已经包含了一个RL代理块,它连接到以下信号:
标量动作输出信号
观测输入信号的矢量
标量奖励输入信号
停止模拟的逻辑输入信号
行动和观察
强化学习环境接收来自智能体的动作信号,并对这些动作生成观察信号。要创建和训练代理,必须创建动作和观察规范对象。
该环境的动作信号是发送到装置的流量控制信号。要为此连续操作信号创建规范对象,请使用rlNumericSpec
函数。
actionInfo = rlNumericSpec([1 1]);actionInfo。Name =“流”;
如果操作信号采用一组离散的可能值之一,则使用rlFiniteSetSpec
函数。
对于这种环境,有三个观察信号被发送到代理,指定为矢量信号。观察向量为 ,地点:
是水箱中水的高度。
,在那里 是水位高度的参考值。
在生成观测子系统中计算观测信号。
open_system ([mdl' /生成观察'])
创建一个观察规格的三元素向量。指定水高度的下界为0,其他观测信号不受限制。
observationInfo = rlNumericSpec([3 1],...“LowerLimit”,[-inf -inf 0]',...“UpperLimit”,[inf inf inf]');observationInfo。Name =“观察”;observationInfo。描述=积分误差,误差和测量高度;
如果操作或观察结果由总线信号表示,则使用bus2RLSpec
函数。
奖励的信号
构造一个标量奖励信号。对于本例,指定以下奖励。
当误差低于时,奖励为正0.1
否则为负。此外,有一个大的奖励惩罚时,水的高度是在0
来20.
的范围内。
在计算奖励子系统中构建这个奖励。
open_system ([mdl/计算奖励的])
停止信号
要终止训练集和模拟,请指定逻辑信号到结束
块的输入端口。对于本例,如果终止插曲
或
.
在停止仿真子系统中计算该信号。
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));结束