此示例显示如何培训深度确定性策略梯度(DDPG)代理以摆动并平衡Simsceal™Multibody™中建模的推车杆系统。
有关DDPG代理的更多信息,请参见深度确定性政策梯度代理.有关如何在MATLAB®中培训DDPG代理的示例,请参阅训练DDPG代理控制双集成商系统.
本例中的强化学习环境是一根连接在小车上的非驱动关节上的杆,小车沿着无摩擦轨道移动。训练目标是用最小的控制努力使杆子直立而不摔倒。
打开模型。
mdl ='rlcartpolesimscapemodel';Open_System(MDL)
车-杆系统采用Simscape Multibody建模。
对于这个模型:
向上平衡的杆位置是0
弧度和向下悬挂的位置是PI.
弧度。
来自代理到环境的力动作信号为-15至15 n。
来自环境的观察是推车的位置和速度,以及极角的正弦,余弦和衍生物。
如果推车从原始位置移动超过3.5米,则逐渐终止。
奖励 ,在每个时间步中提供
在这里:
为从极点垂直位置起的位移角。
是小车从中心位置的位置位移。
来自前一个时间步骤的控制工作。
是一个标志(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代理使用批评价值函数表示来估计长期奖励,给定观察和行动。要创建评论家,首先创建一个具有两个输入(状态和动作)和一个输出的深神经网络。动作路径的输入大小是(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');
查看批评网络配置。
图情节(批评性)
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',“代理”)结束
为了验证训练后的代理的性能,请在车杆环境中进行模拟。有关代理模拟的更多信息,请参见RlsimulationOptions.
和sim卡
.
simoptions = rlsimulation选项('maxsteps', 500);经验= sim (env,代理,simOptions);
BdClose(MDL)
rlDDPGAgent
|rl金宝appSimulinkEnv
|火车