主要内容

火车DDPG代理和平衡摆摆动

这个例子展示了如何训练深决定性策略梯度(DDPG)代理和平衡一个钟摆建模仿真软件®。金宝app

DDPG代理的更多信息,请参阅深决定性策略梯度代理。例如,列车在MATLAB®DDPG代理,看看火车DDPG剂来控制双积分器系统

摆摆起模型

强化学习环境对于这个示例是一个简单的无摩擦摆,最初挂在一个向下的位置。培训的目标是使钟摆直立而不摔倒使用最少的控制工作。

打开模型。

mdl =“rlSimplePendulumModel”;open_system (mdl)

对于这个模型:

  • 向上的平衡摆位置0弧度,向下悬挂位置π弧度。

  • 转矩操作信号从代理环境从2到2 N·m。

  • 的观测环境是摆角的正弦、余弦的摆角,和摆角的导数。

  • 奖励 r t ,在每一个时间步,提供

r t = - - - - - - ( θ t 2 + 0 1 θ t ˙ 2 + 0 001年 u t - - - - - - 1 2 )

在这里:

  • θ t 的位移角直立位置。

  • θ t ˙ 的导数是位移角。

  • u t - - - - - - 1 从前面的时间步长控制的努力。

关于这个模型的更多信息,请参阅负载预定义的仿真软件环境金宝app

创建环境接口

创建一个预定义的钟摆环境界面。

env = rlPredefinedEnv (“SimplePendulumModel-Continuous”)
env = 金宝appSimulinkEnvWithAgent属性:模型:rlSimplePendulumModel AgentBlock: rlSimplePendulumModel / RL代理ResetFcn: [] UseFastRestart:

接口有一个持续的行动空间之间的代理可以应用扭矩值2 - 2 N·m的钟摆。

设置观测环境的摆角的正弦、余弦的摆角,和摆角的导数。

numObs = 3;set_param (“rlSimplePendulumModel /创建观察”,“ThetaObservationHandling”,“要求”);

定义初始条件的摆挂向下,指定一个环境重置函数使用一个匿名函数处理。这个重置函数设置工作空间变量的模型theta0π

env。ResetFcn = @(在)setVariable (,“theta0”π,“工作区”、mdl);

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

t = 0.05;Tf = 20;

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

rng (0)

创建DDPG代理

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

statePath = [featureInputLayer numObs,“归一化”,“没有”,“名字”,“观察”)fullyConnectedLayer (400,“名字”,“CriticStateFC1”)reluLayer (“名字”,“CriticRelu1”)fullyConnectedLayer (300,“名字”,“CriticStateFC2”));actionPath = [featureInputLayer (1,“归一化”,“没有”,“名字”,“行动”)fullyConnectedLayer (300,“名字”,“CriticActionFC1”,“BiasLearnRateFactor”,0)];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 = dlnetwork (criticNetwork);

查看评论家网络配置。

图绘制(layerGraph (criticNetwork))

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

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

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

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

obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);评论家= rlQValueFunction (criticNetwork obsInfo actInfo,“ObservationInputNames”,“观察”,“ActionInputNames”,“行动”);

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

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

actorNetwork = [featureInputLayer numObs,“归一化”,“没有”,“名字”,“观察”)fullyConnectedLayer (400,“名字”,“ActorFC1”)reluLayer (“名字”,“ActorRelu1”)fullyConnectedLayer (300,“名字”,“ActorFC2”)reluLayer (“名字”,“ActorRelu2”)fullyConnectedLayer (1,“名字”,“ActorFC3”)tanhLayer (“名字”,“ActorTanh”)scalingLayer (“名字”,“ActorScaling”,“规模”马克斯(actInfo.UpperLimit)));actorNetwork = dlnetwork (actorNetwork);actorOpts = rlOptimizerOptions (“LearnRate”1 e-04“GradientThreshold”1);演员= rlContinuousDeterministicActor (actorNetwork obsInfo actInfo);

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

agentOpts = rlDDPGAgentOptions (“SampleTime”Ts,“CriticOptimizerOptions”criticOpts,“ActorOptimizerOptions”actorOpts,“ExperienceBufferLength”1 e6,“DiscountFactor”,0.99,“MiniBatchSize”,128);agentOpts.NoiseOptions。方差= 0.6;agentOpts.NoiseOptions。VarianceDecayRate = 1 e-5;

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

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

火车代理

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

  • 运行培训最多50000集,每集持久的最多装天花板(Tf / Ts)时间的步骤。

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

  • 停止训练当代理接收到平均累积奖励大于-740连续在5集。在这一点上,代理可以快速平衡钟摆在直立位置使用最少的控制工作。

  • 保存一份代理每集累积奖励大于-740。

有关更多信息,请参见rlTrainingOptions

maxepisodes = 5000;maxsteps =装天花板(Tf / Ts);trainOpts = rlTrainingOptions (“MaxEpisodes”maxepisodes,“MaxStepsPerEpisode”maxsteps,“ScoreAveragingWindowLength”5,“详细”假的,“阴谋”,“训练进步”,“StopTrainingCriteria”,“AverageReward”,“StopTrainingValue”,-740,“SaveAgentCriteria”,“EpisodeReward”,“SaveAgentValue”,-740);

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

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

模拟DDPG代理

验证培训代理的性能,模拟在钟摆的环境。代理模拟更多的信息,请参阅rlSimulationOptionssim卡

simOptions = rlSimulationOptions (“MaxSteps”,500);经验= sim (env,代理,simOptions);

图单摆可视化工具包含一个坐标轴对象。坐标轴对象包含2线类型的对象,长方形。

另请参阅

||

相关的话题