主要内容

创建仿真软件环境和培训代理

这个例子展示了如何将PI控制器watertank仿真软件®模型来强化学习深决定性策略梯度(DDPG)代理。例如,列车在MATLAB®DDPG代理,看看火车DDPG剂来控制双积分器系统

水箱模型

这个例子的原始模型是水箱模型。我们的目标是控制水箱的水的水平。关于水箱模型的更多信息,请参阅watertank仿真软件模型(仿真软件控制设计)

修改原有的模式通过以下更改:

  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。在这个模型和变化的更多信息,见创建模型强化学习环境

open_system (“rlwatertank”)

创建环境界面

创建一个环境模型包括定义如下:

定义观测规范obsInfo和行为规范actInfo

obsInfo = rlNumericSpec (1 [3],LowerLimit =(负负无穷到0)',UpperLimit =[正正正]);obsInfo。Name =“观察”;obsInfo。描述=“综合误差、误差和测量高度”;actInfo = rlNumericSpec ([1]);actInfo。Name =“流”;

构建环境界面对象。

env = rlSimulinkEnv (“rlwatertank”,“rlwatertank / RL代理”,obsInfo actInfo);

设置一个定制的复位函数,随机模型的参考价值。

env。ResetFcn = @(在)localResetFcn(的);

指定仿真时间特遣部队和代理样品时间Ts在几秒钟内。

t = 1.0;Tf = 200;

解决随机发生器再现性的种子。

rng (0)

创建一个评论家

给定观察和操作,DDPG代理接近长期奖励使用价值函数近似者作为一个评论家。

创建一个深层神经网络近似函数值在评论家。创建一个与两个输入网络,观察和行动,和一个输出值,使用三种不同的路径,并指定每条路径的行向量层对象。您可以获得的观察和行动空间的维数obsInfoactInfo规范。

statePath = [featureInputLayer obsInfo.Dimension (1) Name =“netObsIn”)fullyConnectedLayer (50) reluLayer fullyConnectedLayer(25日Name =“CriticStateFC2”));actionPath = [featureInputLayer actInfo.Dimension (1) Name =“netActIn”Name =) fullyConnectedLayer(25日“CriticActionFC1”));commonPath = [additionLayer(2名=“添加”)reluLayer fullyConnectedLayer (Name =“CriticOutput”));criticNetwork = layerGraph ();criticNetwork = addLayers (criticNetwork statePath);criticNetwork = addLayers (criticNetwork actionPath);criticNetwork = addLayers (criticNetwork commonPath);criticNetwork = connectLayers (criticNetwork,“CriticStateFC2”,“添加/三机一体”);criticNetwork = connectLayers (criticNetwork,“CriticActionFC1”,“添加/ in2”);

查看评论家网络配置。

图绘制(criticNetwork)

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

网络转换为一个dlnetwork对象,并总结其属性。

criticNetwork = dlnetwork (criticNetwork);总结(criticNetwork)
初始化:可学的真正的数量:1.5 k输入:1“netObsIn”3特征2的netActIn 1功能

创建评论家接近者对象使用指定的深层神经网络环境的规范对象,如果网络输入姓名与观察和行动有关渠道。

评论家= rlQValueFunction (criticNetwork obsInfo actInfo,ObservationInputNames =“netObsIn”,ActionInputNames =“netActIn”);

核反应能量函数对象的更多信息,参见rlQValueFunction

检查随机输入的评论家观察和行动。

getValue(评论家,{兰德(obsInfo.Dimension)},{兰德(actInfo.Dimension)})
ans =-0.1631

创建批评者的更多信息,请参阅创建政策和价值功能

创建一个演员

给定观察,DDPG代理决定行动,使用一个确定性的政策,实现的一个演员。

创建一个深层神经网络近似策略中的演员。创建一个网络,一个输入,观察,和一个输出,行动,一个行向量层对象。您可以获得的观察和行动空间的维数obsInfoactInfo规范。

actorNetwork = [featureInputLayer (obsInfo.Dimension (1) fullyConnectedLayer (3) tanhLayer fullyConnectedLayer (actInfo.Dimension (1)));

网络转换为一个dlnetwork对象,并总结其属性。

actorNetwork = dlnetwork (actorNetwork);总结(actorNetwork)
初始化:可学的真正的数量:16个输入:1“输入”3的特性

创建角色接近者对象使用指定的深层神经网络环境的规范对象,如果网络名称输入与观测通道有关。

演员= rlContinuousDeterministicActor (actorNetwork obsInfo actInfo);

有关更多信息,请参见rlContinuousDeterministicActor

检查演员与一个随机输入的观察。

getAction(演员,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[-0.3408]}

创建批评者的更多信息,请参阅创建政策和价值功能

创建DDPG代理

创建DDPG代理使用指定的演员和评论家合拢器对象。

代理= rlDDPGAgent(演员、批评);

有关更多信息,请参见rlDDPGAgent

指定代理,选择演员,评论家使用点符号。

代理。SampleTime = t;agent.AgentOptions。TargetSmoothFactor = 1e-3; agent.AgentOptions.DiscountFactor = 1.0; agent.AgentOptions.MiniBatchSize = 64; agent.AgentOptions.ExperienceBufferLength = 1e6; agent.AgentOptions.NoiseOptions.Variance = 0.3; agent.AgentOptions.NoiseOptions.VarianceDecayRate = 1e-5; agent.AgentOptions.CriticOptimizerOptions.LearnRate = 1e-03; agent.AgentOptions.CriticOptimizerOptions.GradientThreshold = 1; agent.AgentOptions.ActorOptimizerOptions.LearnRate = 1e-04; agent.AgentOptions.ActorOptimizerOptions.GradientThreshold = 1;

或者,您可以使用一个指定代理选项rlDDPGAgentOptions对象。

检查代理使用一个随机输入的观察。

getAction(代理,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[-0.7926]}

火车代理

培训代理商,首先指定培训选项。对于这个示例,使用以下选项:

  • 运行每个培训5000年集。指定每一期持续最多装天花板(Tf / Ts)(即200年)时间的步骤。

  • 在事件管理器对话框显示培训进展(设置情节在命令行选项)和禁用显示(设置详细的选项)。

  • 停止训练当代理接收到平均累积奖励大于800年20.连续集。在这一点上,代理可以控制在水箱的水平。

有关更多信息,请参见rlTrainingOptions

trainOpts = rlTrainingOptions (MaxEpisodes = 5000,MaxStepsPerEpisode =装天花板(Tf / Ts),ScoreAveragingWindowLength = 20,Verbose = false,情节=“训练进步”,StopTrainingCriteria =“AverageReward”,StopTrainingValue = 800);

火车代理使用火车函数。培训是一个计算密集型的过程需要几分钟才能完成。节省时间在运行这个例子中,加载一个pretrained代理设置doTraining。训练自己代理,集doTraining真正的

doTraining = false;如果doTraining%培训代理。trainingStats =火车(代理,env, trainOpts);其他的%加载pretrained代理的例子。负载(“WaterTankDDPG.mat”,“代理”)结束

验证培训代理

验证了代理模型的仿真。

simOpts = rlSimulationOptions (MaxSteps =装天花板(Tf / Ts) StopOnError =“上”);经验= sim (env,代理,simOpts);

本地函数

函数= localResetFcn(中)%随机参考信号黑色= sprintf (“rlwatertank /期望\ nWater级别”);h = 3 * randn + 10;h < = 0 | | h > = 20 h = 3 * randn + 10;结束在= setBlockParameter(黑色,“价值”num2str (h));%随机初始高度h = 3 * randn + 10;h < = 0 | | h > = 20 h = 3 * randn + 10;结束黑色=“rlwatertank /水箱系统/ H”;在= setBlockParameter(黑色,“InitialCondition”num2str (h));结束

另请参阅

相关的话题

Baidu
map