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