主要内容

创建Simul金宝appink环境和培训代理

这个例子演示了如何在水缸金宝appSimulink®模型到钢筋学习深度确定性政策梯度(DDPG)代理。有关在MATLAB®中列出DDPG代理的示例,请参阅火车DDPG代理控制双积分系统

水箱模型

这个例子的原始模型是水箱模型。目标是控制罐中的水的水平。有关水箱模型的更多信息,请参阅Watertank 金宝appSimulink模型(金宝appSimulink控制设计)

通过以下更改修改原始模型:

  1. 删除PID控制器。

  2. 插入RL代理块。

  3. 连接观察向量 [ E. DT. E. H ] T. ,在那里 H 是水箱的高度, E. = R. - H , 和 R. 是参考高度。

  4. 奖励 = 10 | E. | < 0. 1 的) - 1 | E. | 0. 1 的) - One hundred. H 0. | | H 20. 的)

  5. 配置终止信号,使模拟停止如果 H 0. H 20.

得到的模型是rlwatertank.slx..有关此模型和更改的更多信息,请参见创建Simul金宝appink强化学习环境

open_system ('rlwatertank'的)

创建环境接口

创建环境模型包括定义以下内容:

定义观察规范obsinfo.和行动规范actInfo

obsInfo = rlNumericSpec([3 1],...“LowerLimit”,[-inf -inf 0]',...'上限',[inf inf inf]');obsInfo。Name =“观察”;obsInfo。描述=“综合误差、误差和测量高度”;numObservations = obsInfo.Dimension (1);actInfo = rlNumericSpec([1 1]);actInfo。Name ='流动';numActions = actInfo.Dimension (1);

构建环境接口对象。

env = rl金宝appSimulinkEnv ('rlwatertank'“rlwatertank / RL代理”...Obsinfo,Actinfo);

设置自定义重置函数,随机化模型的参考值。

env.resetfcn = @(in)localresetfcn(in);

指定模拟时间特遣部队和代理采样时间Ts片刻之间。

ts = 1.0;tf = 200;

修复随机生成器种子的再现性。

rng (0)

创建DDPG代理

给定观察和行动,DDPG代理使用批判价值函数表示近似长期奖励。要创建批评家,首先要创建一个深度神经网络,它有两个输入,一个是观察和行动,一个是输出。有关创建深度神经网络值函数表示的更多信息,请参见创建策略和价值功能表示

statepath = [featureInputLayer(numobservations,“归一化”'没有任何''姓名''状态')全康连接层(50,'姓名''批评者福科')剥离('姓名''rictrelu1') fullyConnectedLayer (25,'姓名''批评者福尔2')];ActionPath = [featureInputLayer(Remage,“归一化”'没有任何''姓名'“行动”) fullyConnectedLayer (25,'姓名'“CriticActionFC1”)];commonpath = [附加层(2,'姓名'“添加”)剥离('姓名''批判杂志') fullyConnectedLayer (1,'姓名'“CriticOutput”)];批判性= layergraph();批评网络= Addlayers(批评性,州Path);批评网络= addlayers(批判性,ActionPath);批评者= addlayers(批判性,CommonPath);批评网络= ConnectLayers(批评者,'批评者福尔2''添加/ in1');批评网络= ConnectLayers(批评者,“CriticActionFC1”“添加/ in2”);

查看批评批评网络配置。

图情节(批评性)

图中包含一个轴对象。axis对象包含一个graphplot类型的对象。

指定使用批评者表示的选项rlrepresentationOptions.

批评= rlrepresentationOptions('学习'1 e 03'gradientthreshold',1);

使用指定的深度神经网络和选项创建批评家表示。您还必须为评论家指定操作和观察规范,这是从环境接口获得的。有关更多信息,请参阅rlQValueRepresentation

评论家= rlqvalueerepresentation(批评,underinfo,actinfo,“观察”,{'状态'},“行动”,{“行动”},批评);

鉴于观察,DDPG代理决定使用演员表示采取的行动。要创建演员,首先创建一个输入,观察和一个输出的深神经网络,动作。

以与评论家类似的方式构建演员。有关更多信息,请参阅rlDeterministicActorRepresentation

actorNetwork = [featureInputLayer(numobobservations,“归一化”'没有任何''姓名''状态') fullyConnectedLayer (3'姓名'“actorFC”)Tanhlayer('姓名''actortanh') fullyConnectedLayer (numActions'姓名'“行动”));actorOptions = rlRepresentationOptions ('学习'1 e-04'gradientthreshold',1);Actor = RLDETerminyActorRepresentation(Actornetwork,Obsinfo,Actinfo,“观察”,{'状态'},“行动”,{“行动”}, actorOptions);

要创建DDPG代理,请先使用DDPG代理使用rlddpgagentoptions.

agentOpts = rlDDPGAgentOptions (...“SampleTime”,ts,...'targetsmoothfactor'1 e - 3,...'贴花因子',1.0,...“MiniBatchSize”,64,...'经验bufferlength',1E6);agentopts.noiseOptions.variance = 0.3;代理.NoiseOptions.VarecedCayrate = 1E-5;

然后,使用指定的Actor表示,批评者表示和代理选项创建DDPG代理。有关更多信息,请参阅rlDDPGAgent

代理= rlddpgagent(演员,评论家,代理商);

火车代理

要培训代理,首先指定培训选项。对于本例,使用以下选项:

  • 每次训练最多跑一次5000集。指定每一集最多持续时间CEIL(TF / TS)(即200.)时间的步骤。

  • 在“插曲管理器”对话框中显示培训进度(设置情节选项)并禁用命令行显示(设置verb选择错误的)。

  • 当代理收到平均累积奖励时停止培训大于800超过20.连续发作。此时,药剂可以控制罐中的水平。

有关更多信息,请参阅rltringOptions.

maxepisodes = 5000;maxsteps =装天花板(Tf / Ts);trainOpts = rlTrainingOptions (...“MaxEpisodes”maxepisodes,...“MaxStepsPerEpisode”,maxsteps,...'scoreaveragingwindowlength', 20岁,...“详细”,错误的,...'plots'“训练进步”...'stoptrinaincriteria'“AverageReward”...'stoptriningvalue',800);

训练代理人使用火车函数。培训是一个计算密集型的过程,需要几分钟才能完成。为了节省运行此示例的时间,请通过设置加载预先训练过的代理偶然错误的.训练代理人,套装偶然真的

dotraining = false;如果偶然培训代理商。trainingStats =火车(代理,env, trainOpts);别的%加载示例的预训练代理。负载(“WaterTankDDPG.mat”“代理”的)结尾

验证培训代理

通过仿真验证了该模型的有效性。

Simopts = RlsimulationOptions(“MaxSteps”,maxsteps,“StopOnError”'在');体验= SIM(ENV,Agent,Simopts);

本地函数

功能= localResetFcn(中)%随机化参考信号黑色= sprintf (“rlwatertank /期望\ nWater级别”);H = 3*randn + 10;尽管H <= 0 || >= 20 H = 3*randn + 10;结尾在= setBlockParameter(IN,BLK,'价值',num2str(h));%随机化初始高度H = 3*randn + 10;尽管H <= 0 || >= 20 H = 3*randn + 10;结尾BLK =“rlwatertank /水箱系统/ H”;在= setBlockParameter(IN,BLK,'初始条件',num2str(h));结尾

也可以看看

相关的话题