• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

MATLAB强化学习工具箱(四)创建水箱强化学习模型

人工智能 柯南404 2811次浏览 0个评论

创建水箱强化学习模型

  • 问题描述
  • 行动与观测
  • 奖励信号
  • 终止信号
  • 创建环境对象
  • 重置函数

 本示例说明如何创建一个水箱强化学习Simulink®环境,该环境包含一个RL Agent块来代替用于水箱中水位的控制器。要模拟此环境,必须创建一个智能体并在RL智能体块中指定该智能体。

问题描述
如果直接在matlab使用

open_system('rlwatertank')

则会报错

No system or file called ‘rlwatertank’ found. ‘rlwatertank’ 用于
Create Simulink Environment and Train Agent
Validate Simulink Environment
Water Tank Reinforcement Learning Environment Model。

或者

在这里插入图片描述

需要先对智能体进行创建。

mdl = 'rlwatertank';
open_system(mdl)

在这里插入图片描述

该模型已经包含一个RL Agent块,该块连接到以下信号:

标量动作输出信号

观测输入信号的向量

标量奖励输入信号

逻辑输入信号,用于停止仿真

行动与观测

强化学习环境从智能体接收动作信号,并响应于这些动作生成观察信号。要创建和训练智能体,必须创建操作和观察规范对象。

在这种环境下的作用信号是发送到工厂的流量控制信号。要为此连续动作信号创建规格对象,请使用rlNumericSpec功能。

actionInfo = rlNumericSpec([1 1]);
actionInfo.Name = ‘flow’;

如果动作信号采用一组离散的可能值之一,则使用该rlFiniteSetSpec函数创建规格。

对于此环境,有三个发送到代理的观察信号,指定为矢量信号。观察向量是[ ∫ e   d t   e   h ] T 其中:

h 是水箱中水的高度。

2.e = r − h ,r 是水高的参考值。

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

open_system([mdl '/generate observations'])

在这里插入图片描述

创建观察规范的三元素向量。将水高度的下限指定为0,使其他观察信号不受限制。

observationInfo = rlNumericSpec([3 1],...
    'LowerLimit',[-inf -inf 0  ]',...
    'UpperLimit',[ inf  inf inf]');
observationInfo.Name = 'observations';
observationInfo.Description = 'integrated error, error, and measured height';

如果动作或观察结果由总线信号表示,则使用该bus2RLSpec功能创建规格。

奖励信号

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

奖励= 10 ( ∣ e ∣ < 0.1 ) − 1 ( ∣ e ∣ ≥ 0.1 ) − 100 ( h ≤ 0 ∣ ∣ h ≥ 20 ) 

当误差低于误差时,奖励为正,0.1否则为负。此外,有一个大的奖励惩罚当水高度为外0给20范围。

在计算奖励子系统中构造此奖励。

open_system([mdl ‘/calculate reward’])

在这里插入图片描述

终止信号

要终止训练情节和模拟,请向模块的isdone输入端口指定逻辑信号。对于此示例,如果h ≤ 0 h≤0h≤0 要么 h ≥ 20 h≥20h≥20.

在停止模拟子系统中计算该信号。

open_system([mdl '/stop simulation'])

在这里插入图片描述

创建环境对象

为Simulink创建一个环境对象

env = rlSimulinkEnv(mdl,[mdl '/RL Agent'],observationInfo,actionInfo);

重置函数

您还可以创建一个自定义重置功能,以随机化模型的参数,变量或状态。在此示例中,重置功能将参考信号和初始水位随机化,并设置相应的块参数。

env.ResetFcn = @(in)localResetFcn(in);

在本地创建函数 localResetFcn.m ,在文件中添加

function in = localResetFcn(in)

% Randomize reference signal
blk = sprintf('rlwatertank/Desired \nWater Level');
h = 3*randn + 10;
while h <= 0 || h >= 20
    h = 3*randn + 10;
end
in = setBlockParameter(in,blk,'Value',num2str(h));

% Randomize initial height
h = 3*randn + 10;
while h <= 0 || h >= 20
    h = 3*randn + 10;
end
blk = 'rlwatertank/Water-Tank System/H';
in = setBlockParameter(in,blk,'InitialCondition',num2str(h));

end


此时 rlwatertank 环境创建完毕
重新执行

open_system('rlwatertank')

就可以开始水箱模型的强化学习训练啦

训练水箱模型


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明MATLAB强化学习工具箱(四)创建水箱强化学习模型
喜欢 (0)

您必须 登录 才能发表评论!

加载中……