主要内容

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

本示例展示了如何训练深度确定性策略梯度(DDPG)代理在Simscape™Multibody™中建模的车杆系统中向上摆动和平衡。

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

车杆模拟景观模型

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

打开模型。

mdl =“rlCartPoleSimscapeModel”;open_system (mdl)

车杆系统采用Simscape Multibody建模。

对于这个模型:

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

  • 从agent到环境的力动作信号为-15 ~ 15n。

  • 来自环境的观测是小车的位置和速度,以及极点角度的正弦、余弦和导数。

  • 如果推车从原来的位置移动超过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环境金宝app

创建环境界面

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

环境= rlPredefinedEnv(“CartPoleSimscapeModel-Continuous”
env = 金宝appSimulinkEnvWithAgent 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,“归一化”“没有”“名字”“观察”) fullyConnectedLayer (128,“名字”“CriticStateFC1”) reluLayer (“名字”“CriticRelu1”) fullyConnectedLayer (200,“名字”“CriticStateFC2”));actionPath = [featureInputLayer(1,“归一化”“没有”“名字”“行动”) fullyConnectedLayer (200,“名字”“CriticActionFC1”“BiasLearnRateFactor”, 0)];commonPath = [addtionlayer (2,“名字”“添加”) reluLayer (“名字”“CriticCommonRelu”) fullyConnectedLayer (1,“名字”“CriticOutput”));criticNetwork = layerGraph(statePath);criticNetwork = addLayers(criticNetwork,actionPath);criticNetwork = addLayers(criticNetwork,commonPath);临界网络= connectLayers(临界网络,“CriticStateFC2”“添加/三机一体”);临界网络= connectLayers(临界网络,“CriticActionFC1”“添加/ in2”);临界网络= dlnetwork(临界网络);

查看关键网络配置。

图绘制(layerGraph (criticNetwork))

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

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

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

rlQValueFunction(criticNetwork,obsInfo,actInfo,...“ObservationInputNames”“观察”“ActionInputNames”“行动”);

DDPG代理使用参与者表示,根据观察结果决定采取何种操作。为了创建参与者,首先创建一个深度神经网络,其中一个输入(观察)和一个输出(动作)。

用与评论家相似的方式来构建演员。有关更多信息,请参见rlContinuousGaussianActor

actorNetwork = [featureInputLayer(numObservations,“归一化”“没有”“名字”“观察”) fullyConnectedLayer (128,“名字”“ActorFC1”) reluLayer (“名字”“ActorRelu1”) fullyConnectedLayer (200,“名字”“ActorFC2”) reluLayer (“名字”“ActorRelu2”) fullyConnectedLayer (1,“名字”“ActorFC3”) tanhLayer (“名字”“ActorTanh1”) scalingLayer (“名字”“ActorScaling”“规模”马克斯(actInfo.UpperLimit)));actorNetwork = dlnetwork(actorNetwork);actorOptions = rlOptimizerOptions(“LearnRate”5 e-04,“GradientThreshold”1);actor = rlContinuousDeterministicActor(actorNetwork,obsInfo,actInfo);

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

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

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

agent = rlDDPGAgent(actor,批评家,agentOptions);

火车代理

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

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

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

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

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

有关更多信息,请参见rlTrainingOptions

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

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

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

模拟DDPG Agent

为了验证训练过的智能体的性能,在车杆环境中进行了仿真。有关代理模拟的详细信息,请参见rlSimulationOptions而且sim卡

simOptions = rlSimulationOptions(“MaxSteps”, 500);experience = sim(env,agent,simOptions);

bdclose (mdl)

另请参阅

||

相关的话题