创建仿真软件环境和培训代理
这个例子展示了如何将PI控制器watertank
仿真软件®模型来强化学习深决定性策略梯度(DDPG)代理。例如,列车在MATLAB®DDPG代理,看看火车DDPG剂来控制双积分器系统。
水箱模型
这个例子的原始模型是水箱模型。我们的目标是控制水箱的水的水平。关于水箱模型的更多信息,请参阅watertank仿真软件模型(仿真软件控制设计)。
修改原有的模式通过以下更改:
删除PID控制器。
插入块RL代理。
连接观察向量 ,在那里 槽的高度, , 是高度的引用。
设置奖励 。
配置这类仿真停止如果终止信号 或 。
由此产生的模型rlwatertank.slx
。在这个模型和变化的更多信息,见创建模型强化学习环境。
open_system (“rlwatertank”)
创建环境界面
创建一个环境模型包括定义如下:
代理使用行动和观测信号与环境进行交互。有关更多信息,请参见
rlNumericSpec
和rlFiniteSetSpec
。代理使用奖励信号来测量它的成功。有关更多信息,请参见定义奖励信号。
定义观测规范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代理接近长期奖励使用价值函数近似者作为一个评论家。
创建一个深层神经网络近似函数值在评论家。创建一个与两个输入网络,观察和行动,和一个输出值,使用三种不同的路径,并指定每条路径的行向量层对象。您可以获得的观察和行动空间的维数obsInfo
和actInfo
规范。
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)
网络转换为一个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代理决定行动,使用一个确定性的政策,实现的一个演员。
创建一个深层神经网络近似策略中的演员。创建一个网络,一个输入,观察,和一个输出,行动,一个行向量层对象。您可以获得的观察和行动空间的维数obsInfo
和actInfo
规范。
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));结束