主要内容

创建仿真软件环万博1manbetx境和培训代理

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

水箱模型

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

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

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

open_system (“rlwatertank”)

创建环境接口

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

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

obsInfo = rlNumericSpec (1 [3],“LowerLimit”,(负负0]”,“UpperLimit”,正正正]);obsInfo。Name =“观察”;obsInfo。描述=综合误差、误差和测量身高的;numObservations = obsInfo.Dimension (1);actInfo = rlNumericSpec ([1]);actInfo。Name =“流”;numActions = actInfo.Dimension (1);

构建环境界面对象。

env = rl万博1manbetxSimulinkEnv (“rlwatertank”,“rlwatertank / RL代理”,obsInfo actInfo);

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

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

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

t = 1.0;Tf = 200;

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

rng (0)

创建DDPG代理

给定观察和操作,DDPG代理接近长期奖励使用一个批评家的值函数表示。创建评论家,首先创建一个深和两个输入神经网络,观察和行动,和一个输出。更多信息创建一个深层神经网络价值函数表示,看到的创建政策和价值函数表示

statePath = [featureInputLayer numObservations,“归一化”,“没有”,“名字”,“状态”)fullyConnectedLayer (50,“名字”,“CriticStateFC1”)reluLayer (“名字”,“CriticRelu1”)fullyConnectedLayer (25,“名字”,“CriticStateFC2”));actionPath = [featureInputLayer numActions,“归一化”,“没有”,“名字”,“行动”)fullyConnectedLayer (25,“名字”,“CriticActionFC1”));commonPath = [additionLayer (2,“名字”,“添加”)reluLayer (“名字”,“CriticCommonRelu”)fullyConnectedLayer (1,“名字”,“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类型的对象包含一个对象。

使用指定选项评论家表示rlRepresentationOptions

criticOpts = rlRepresentationOptions (“LearnRate”1 e 03“GradientThreshold”1);

创建一个使用指定的评论家表示深层神经网络和选项。您还必须指定操作和观察的批评家,你从环境中获取接口。有关更多信息,请参见rlQValueRepresentation

评论家= rlQValueRepresentation (criticNetwork obsInfo actInfo,“观察”,{“状态”},“行动”,{“行动”},criticOpts);

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

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

actorNetwork = [featureInputLayer numObservations,“归一化”,“没有”,“名字”,“状态”)fullyConnectedLayer (3“名字”,“actorFC”)tanhLayer (“名字”,“actorTanh”)fullyConnectedLayer (numActions“名字”,“行动”));actorOptions = rlRepresentationOptions (“LearnRate”1 e-04“GradientThreshold”1);演员= rlDeterministicActorRepresentation (actorNetwork obsInfo actInfo,“观察”,{“状态”},“行动”,{“行动”},actorOptions);

创建DDPG代理,首先使用指定DDPG代理选项rlDDPGAgentOptions

agentOpts = rlDDPGAgentOptions (“SampleTime”Ts,“TargetSmoothFactor”1 e - 3,“DiscountFactor”,1.0,“MiniBatchSize”,64,“ExperienceBufferLength”1 e6);agentOpts.NoiseOptions。方差= 0.3;agentOpts.NoiseOptions。VarianceDecayRate = 1 e-5;

然后,创建DDPG代理使用指定的演员表示,评论家表示,和代理的选择。有关更多信息,请参见rlDDPGAgent

代理= rlDDPGAgent(演员、评论家、agentOpts);

火车代理

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

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

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

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

有关更多信息,请参见rlTrainingOptions

maxepisodes = 5000;maxsteps =装天花板(Tf / Ts);trainOpts = rlTrainingOptions (“MaxEpisodes”maxepisodes,“MaxStepsPerEpisode”maxsteps,“ScoreAveragingWindowLength”,20岁,“详细”假的,“阴谋”,“训练进步”,“StopTrainingCriteria”,“AverageReward”,“StopTrainingValue”,800);

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

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

验证培训代理

验证了代理模型的仿真。

simOpts = rlSimulationOptions (“MaxSteps”maxsteps,“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));结束

另请参阅

相关的话题