主要内容

训练DDPG代理摆动和平衡车杆系统

此示例显示如何培训深度确定性策略梯度(DDPG)代理以摆动并平衡Simsceal™Multibody™中建模的推车杆系统。

有关DDPG代理的更多信息,请参见深度确定性政策梯度代理.有关如何在MATLAB®中培训DDPG代理的示例,请参阅训练DDPG代理控制双集成商系统

Cart-Pole Simscape模型

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

打开模型。

mdl ='rlcartpolesimscapemodel';Open_System(MDL)

车-杆系统采用Simscape Multibody建模。

对于这个模型:

  • 向上平衡的杆位置是0弧度和向下悬挂的位置是PI.弧度。

  • 来自代理到环境的力动作信号为-15至15 n。

  • 来自环境的观察是推车的位置和速度,以及极角的正弦,余弦和衍生物。

  • 如果推车从原始位置移动超过3.5米,则逐渐终止。

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

r t - 0 1 5 θ. t 2 + x t 2 + 0 05 u t - 1 2 ) - 100. B

在这里:

  • θ. t 为从极点垂直位置起的位移角。

  • x t 是小车从中心位置的位置位移。

  • u t - 1 来自前一个时间步骤的控制工作。

  • B 是一个标志(1或0),指示推车是否超出界限。

有关此模型的更多信息,请参阅加载预定义的Simulink环境金宝app

创建环境接口

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

env = rlPredefinedEnv ('cartpolesimscapemodel-continual')
env = 金宝appSimulinkEnvWithAgent with properties: Model: rlCartPoleSimscapeModel AgentBlock: rlCartPoleSimscapeModel/RL Agent ResetFcn: [] UseFastRestart: on . env = SimulinkEnvWithAgent with properties: Model: rlCartPoleSimscapeModel AgentBlock: rlCartPoleSimscapeModel/RL Agent ResetFcn: [] UseFastRestart: on

界面有一个连续的作用空间,在这个空间中,剂可以将可能的扭矩值从-15到15n施加到杆上。

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

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

指定模拟时间特遣部队和代理采样时间Ts马上

ts = 0.02;tf = 25;

修复随机发生器种子以进行再现性。

rng (0)

创建DDPG代理

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

statePath = [featureInputLayer(numObservations,'正常化'“没有”“名字”'观察')全连接列(128,“名字”'批评福尔福克') reluLayer (“名字”'rictrelu1')全康校长(200,“名字”'批评福尔2'));ActionPath = [FeatureInputLayer(1,'正常化'“没有”“名字”“行动”)全康校长(200,“名字”'批评FC1'“BiasLearnRateFactor”,0)];commonpath = [附加层(2,“名字”“添加”) reluLayer (“名字”'批判杂志') fullyConnectedLayer (1,“名字”'批评'));criticNetwork = layerGraph (statePath);criticNetwork = addLayers (criticNetwork actionPath);criticNetwork = addLayers (criticNetwork commonPath);criticNetwork = connectLayers (criticNetwork,'批评福尔2''添加/ IN1');criticNetwork = connectLayers (criticNetwork,'批评FC1''添加/ in2');

查看批评网络配置。

图情节(批评性)

使用rlRepresentationOptions

QuandOptions = rlrepresentationOptions(“LearnRate”1 e 03'gradientthreshold',1);

使用指定的深度神经网络和选项创建批读表示。您还必须指定从环境界面中已获得的批评者的操作和观察信息。有关更多信息,请参见rlQValueRepresentation

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

给定观察结果,DDPG代理使用参与者表示来决定采取何种行动。要创建参与者,首先创建一个深度神经网络,一个输入(观察),一个输出(动作)。

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

ActorNetWork = [FeatureInputLayer(NumObServations,'正常化'“没有”“名字”'观察')全连接列(128,“名字”“ActorFC1”) reluLayer (“名字”'ACTORRELU1')全康校长(200,“名字”“ActorFC2”) reluLayer (“名字”'ACTORRELU2') fullyConnectedLayer (1,“名字”“ActorFC3”)Tanhlayer(“名字”'actortanh1')ScalingLayer(“名字”'Actorscaling''规模',max(actinfo.upperlimit))];ACTOROPTIONS = RLREPRESENTATIONOPTIONS(“LearnRate”5 e-04,'gradientthreshold',1);Actor = RLDETerminyActorRepresentation(Actornetwork,Obsinfo,Actinfo,“观察”,{'观察'},'行动',{'Actorscaling'},ActorOptions);

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

agentOptions = rlDDPGAgentOptions ('采样时间',ts,'targetsmoothfactor'1 e - 3,“ExperienceBufferLength”1 e6,“MiniBatchSize”, 128);agentOptions.NoiseOptions.StandardDeviation = 0.4;agentOptions.NoiseOptions.StandardDeviationDecayRate = 1 e-5;

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

代理= rlddpgagent(演员,批评者,代理选项);

火车代理

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

  • 在大多数2000剧集中运行每个培训集,每个集发作最多装天花板(Tf / Ts)时间的步骤。

  • 在“章节管理器”对话框中显示培训进度(设置绘图选项)并禁用命令行显示(设置verb选择)。

  • 当特工连续5次获得的平均累计奖励超过-400时,停止训练。在这一点上,代理可以快速平衡杆在直立位置使用最小的控制努力。

  • 为每个集中的累计奖励大于-400,保存代理的副本。

有关更多信息,请参见rltringOptions.

maxepisodes = 2000;maxsteps = ceil(tf / ts);trysertingoptions = rltringOptions('maxepisodes'maxepisodes,'maxstepperepisode',maxsteps,“ScoreAveragingWindowLength”,5,'verbose',错误的,“阴谋”“训练进步”“StopTrainingCriteria”'AverageReward''stoptriningvalue',-400,“SaveAgentCriteria”“EpisodeReward”“SaveAgentValue”,-400);

使用该代理商培训火车功能。培训此代理过程是计算密集的,需要几个小时才能完成。要在运行此示例的同时节省时间,请通过设置加载预制代理doTraining.训练代理人,套装doTraining真的

dotraining = false;如果doTraining%训练特工。trainingStats =火车(代理,env, trainingOptions);别的%加载预磨料的代理。负载('simscapecartpoleddpg.mat'“代理”)结束

模拟DDPG代理

为了验证训练后的代理的性能,请在车杆环境中进行模拟。有关代理模拟的更多信息,请参见RlsimulationOptions.sim卡

simoptions = rlsimulation选项('maxsteps', 500);经验= sim (env,代理,simOptions);

BdClose(MDL)

另请参阅

||

相关话题