主要内容

培训DDPG代理上吊和平衡车杆系统

这个示例展示了如何训练一个深度确定性策略梯度(DDPG)代理,以摆动并平衡Simscape™Multibody™中建模的车杆系统。

有关DDPG代理的更多信息,请参见深度确定性策略梯度代理. 有关如何在MATLAB®中培训DDPG代理的示例,请参见培训DDPG Agent控制双积分系统

Cart-Pole Simscape模型

本例的强化学习环境是一个连接在小车上的非驱动关节上的杆,它沿着无摩擦的轨道移动。训练目标是用最小的控制力使杆子直立而不摔倒。

打开模型。

mdl =“rlCartPoleSimscapeModel”;open_system (mdl)

采用Simscape Multibody对车杆系统进行建模。

对于这个模型:

  • 向上平衡的极点位置是0弧度,向下悬挂的位置是圆周率弧度。

  • 从介质到环境的力作用信号为-15到15 N。

  • 从环境中观察到的是小车的位置和速度,以及极角的正弦、余弦和导数。

  • 如果小车移动超过3.5米,则该集终止。

  • 奖励 r t ,在每个时间步骤中提供,为

r t - 0 1 5 θ t 2 + x t 2 + 0 05 u t - 1 2 - One hundred. B

在这里:

  • θ t 为杆子从竖直位置位移的角度。

  • x t 为从车的中心位置出发的位置位移。

  • u t - 1 是上一个时间步骤的控制工作。

  • B 是指示购物车是否越界的标志(1或0)。

有关此模型的更多信息,请参见加载预定义的Simulink环境万博1manbetx

创建环境接口

为极点创建一个预定义的环境接口。

env = rlPredefinedEnv (“CartPoleSimscapeModel-Continuous”
env = 万博1manbetxSimulinkEnvWithAgent with properties: Model: rlCartPoleSimscapeModel AgentBlock: rlCartPoleSimscapeModel/RL Agent ResetFcn: [] UseFastRestart: on . env = SimulinkEnvWithAgent with properties: Model: rlCartPoleSimscapeModel

该界面有一个连续的作用空间,在该空间中,agent可以将可能的扭矩值从-15 N到15 N施加到极点。

从环境界面获取观察和行动信息。

obsInfo = getObservationInfo (env);numObservations = obsInfo.Dimension (1);actInfo = getActionInfo (env);

指定模拟时间特遣部队以及样本时间Ts在几秒钟内

t = 0.02;Tf = 25;

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

rng (0)

创建DDPG代理

DDPG代理使用批判价值函数表示来近似给定的观察和行动的长期回报。要创建批评家,首先要创建一个有两个输入(状态和动作)和一个输出的深度神经网络。动作路径的输入大小为(1 1 1)因为agent可以将一个动作作为一个力值施加到环境中。有关创建深度神经网络值函数表示的更多信息,请参见创建策略和价值功能表示

statePath = [featureInputLayer(numObservations,“归一化”“没有”“名字”“观察”) fullyConnectedLayer (128,“名字”“CriticStateFC1”) reluLayer (“名字”“CriticRelu1”) fullyConnectedLayer (200,“名字”“CriticStateFC2”));actionPath = [featureInputLayer(1,“归一化”“没有”“名字”“行动”) fullyConnectedLayer (200,“名字”“CriticActionFC1”“BiasLearnRateFactor”, 0)];commonPath =[附加路径]“名字”“添加”) reluLayer (“名字”“CriticCommonRelu”) fullyConnectedLayer (1,“名字”“临界输出”));criticNetwork = layerGraph (statePath);criticNetwork = addLayers (criticNetwork actionPath);criticNetwork = addLayers (criticNetwork commonPath);criticNetwork = connectLayers (criticNetwork,“CriticStateFC2”“添加/三机一体”);criticNetwork = connectLayers (criticNetwork,“CriticActionFC1”“添加/ in2”);

查看critical网络配置。

图绘制(criticNetwork)

为使用的批评家表示指定选项rlRepresentationOptions

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

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

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

DDPG代理在给定的观察结果下,使用actor表示来决定采取什么行动。要创建参与者,首先要创建一个具有一个输入(观察)和一个输出(动作)的深度神经网络。

以与评论家相似的方式构造行动者。有关更多信息,请参见rlDeterministicActorRepresentation

actorNetwork = [featureInputLayer(numobobservations,“归一化”“没有”“名字”“观察”) fullyConnectedLayer (128,“名字”“ActorFC1”) reluLayer (“名字”“ActorRelu1”) fullyConnectedLayer (200,“名字”“ActorFC2”) reluLayer (“名字”“ActorRelu2”) fullyConnectedLayer (1,“名字”“ActorFC3”) tanhLayer (“名字”“ActorTanh1”) scalingLayer (“名字”“ActorScaling”“规模”马克斯(actInfo.UpperLimit)));actorOptions = rlRepresentationOptions (“LearnRate”5 e-04,“GradientThreshold”1);演员= rlDeterministicActorRepresentation (actorNetwork obsInfo actInfo,...“观察”, {“观察”},“行动”, {“ActorScaling”}, actorOptions);

要创建DDPG代理,首先使用rlDDPGAgentOptions

agentOptions = rlDDPGAgentOptions (...“SampleTime”Ts,...“TargetSmoothFactor”1 e - 3,...“ExperienceBufferLength”1 e6,...“MiniBatchSize”, 128);agentOptions.NoiseOptions.Variance = 0.4;agentOptions.NoiseOptions.VarianceDecayRate = 1 e-5;

然后,使用指定的参与者表示、评论家表示和代理选项创建代理。有关更多信息,请参见rlDDPGAgent

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

火车代理

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

  • 每个训练集最多2000集,每集最多持续时间装天花板(Tf / Ts)时间的步骤。

  • 在“插曲管理器”对话框中显示培训进度(设置情节选项),并禁用命令行显示(设置详细的选项).

  • 当代理在连续五次的训练中获得平均累积奖励大于-400时,停止训练。在这一点上,代理可以快速平衡杆在垂直位置使用最小的控制努力。

  • 为累积奖励大于-400的每一集保存一份代理副本。

有关更多信息,请参见rlTrainingOptions

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

训练代理人使用火车函数。训练这个代理过程需要大量的计算,需要几个小时才能完成。为了节省运行此示例的时间,请通过设置加载预先训练过的代理doTraining.自己训练代理人,设置doTraining真正的

doTraining = false;如果doTraining培训代理商。trainingStats =火车(代理,env, trainingOptions);其他的%加载示例的预训练代理。负载(“SimscapeCartPoleDDPG.mat”“代理”结束

模拟DDPG代理

为了验证训练过的代理的性能,在车杆环境中模拟它。有关代理模拟的更多信息,请参见rlSimulationOptionssim卡

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

bdclose (mdl)

另请参阅

||

相关的话题