此示例显示了如何创建水箱加固学习Simulink®环境,该环境包含RL代理块,代替水箱中的水位的控制器。金宝app要模拟此环境,您必须创建代理并在RL代理程序块中指定该代理。有关使用此环境培训代理的示例,请参阅创建Simul金宝appink环境和培训代理。
mdl ='rlwatertank';Open_System(MDL)
此模型已包含RL代理块,其连接到以下信号:
标量动作输出信号
观察输入信号矢量
标量奖励输入信号
用于停止模拟的逻辑输入信号
加强学习环境从代理接收动作信号,并响应于这些动作生成观察信号。要创建和培训代理,您必须创建动作和观察规范对象。
该环境的动作信号是发送到工厂的流量控制信号。要为此连续动作信号创建规范对象,请使用rlnumericspec.
功能。
ActionInfo = rlnumericspec([1 1]);ActionInfo.name =.'流';
如果动作信号采用离散可能的值集中的一个,则使用该规范创建规范rlfinitesetspec.
功能。
对于这种环境,存在发送给代理的三个观察信号,指定为矢量信号。观察向量是 , 在哪里:
是水箱里的水的高度。
, 在哪里 是水高的参考值。
计算生成观察子系统中的观察信号。
Open_System([MDL'/生成观察'])
创建一个三元素矢量的观察规范。为水高指定0的下限,使其他观察信号无限制地留下。
观察info = rlnumericspec([3 1],......'lowerimit',[ - inf-inf 0]'',......'上限',[inf inf inf]');观察info.name ='观察';观察invfo.description =.'集成错误,错误和测量高度';
如果操作或观察由总线信号表示,则使用该操作创建规格bus2rlspec.
功能。
构建标量奖励信号。在此示例中,指定以下奖励。
错误后,奖励是积极的0.1
否则负面。此外,水的高度在外部时存在巨大的奖励罚款0.
至20.
范围。
在计算奖励子系统中构建此奖励。
Open_System([MDL'/计算奖励'])
要终止培训剧集和仿真,请指定逻辑信号已经完成了
块的输入端口。对于此示例,终止剧集if
或者
。
计算停止仿真子系统中的此信号。
Open_System([MDL'/停止模拟'])
为Simulink模型创建一个环境对象。金宝app
ent = rl金宝appsimulinkenv(mdl,[mdl'/ rl代理'],观察,ActionInfo);
您还可以创建一个自定义重置函数,该函数随机化参数,变量或模型的状态。在该示例中,复位功能随机化参考信号和初始水高,并设置相应的块参数。
env.resetfcn = @(in)localresetfcn(in);
功能在= localresetfcn(in)%随机化参考信号blk = sprintf('rlwatertank / labled \ nwater等级');h = 3 * randn + 10;尽管H <= 0 ||h> = 20 h = 3 * randn + 10;结尾在= setBlockParameter(IN,BLK,'价值',num2str(h));%随机化初始高度h = 3 * randn + 10;尽管H <= 0 ||h> = 20 h = 3 * randn + 10;结尾BLK ='rlwatertank /水箱系统/ h';在= setBlockParameter(IN,BLK,'初始条件',num2str(h));结尾