主要内容

训练DDPG代理摆动和平衡摆

这个例子展示了如何训练一个深度确定性策略梯度(DDPG)代理,以使在Simulink®中建模的摆起和平衡。金宝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 来自前一个时间步骤的控制工作。

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

创建环境接口

为钟摆创建一个预定义的环境接口。

env = rlPredefinedEnv (“SimplePendulumModel-Continuous”
env = 金宝appSimulinkEnvWithAgent with properties: Model: rlSimplePendulumModel AgentBlock: rlSimplePendulumModel/RL Agent ResetFcn: [] UseFastRestart: on . env = SimulinkEnvWithAgent with properties: Model: rlSimplePendulumModel AgentBlock: rlSimplePendulumModel/RL Agent ResetFcn: [] UseFastRestart: on

界面有一个连续的作用空间,在这个空间中,agents可以对摆施加-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 = [addtionlayer (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)

图中包含一个轴。这些轴包含一个graphplot类型的对象。

使用rlRepresentationOptions

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

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

obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);评论家= rlQValueRepresentation (criticNetwork obsInfo actInfo,“观察”, {“观察”},“行动”, {“行动”}, criticOpts);

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

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

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

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

agentOpts = rlDDPGAgentOptions (...“SampleTime”Ts,...“TargetSmoothFactor”1 e - 3,...“ExperienceBufferLength”1 e6,...“DiscountFactor”, 0.99,...“MiniBatchSize”, 128);agentOpts.NoiseOptions.StandardDeviation = 0.6;agentOpts.NoiseOptions.StandardDeviationDecayRate = 1 e-5;

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

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

火车代理

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

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

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

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

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

有关更多信息,请参见rlTrainingOptions

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

训练特工使用火车函数。训练这个代理是一个需要数小时才能完成的计算密集型过程。为了节省运行这个示例时的时间,可以通过设置加载一个预先训练过的代理doTraining.亲自训练探员,预备doTraining真正的

doTraining = false;如果doTraining%训练特工。trainingStats =火车(代理,env, trainOpts);其他的%为示例加载预训练的代理。负载(“金宝appSimulinkPendulumDDPG.mat”“代理”结束

模拟DDPG代理

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

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

图单摆可视化器包含一个轴。坐标轴包含两个类型为line和rectangle的对象。

另请参阅

||

相关的话题