主要内容

火车DDPG代理摇摆和平衡摆锤

此示例显示如何培训深度确定性策略梯度(DDPG)代理以摆动并平衡在Simulink®中建模的摆锤。万博1manbetx

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

摆摆起模型

用于该示例的增强学习环境是一个简单的无摩擦摆锤,其最初悬挂在向下位置。培训目标是使摆锤直立,而不会使用最小的控制工作。

打开模型。

mdl ='rlsimplepeneylummodel';open_system (mdl)

对于此模型:

  • 向上的平衡摆位置为0.弧度,向下悬挂的位置是PI.弧度。

  • 来自代理到环境的扭矩动作信号来自-2至2 n·m。

  • 来自环境的观察是摆角的正弦,摆角的余弦和摆角衍生物。

  • 奖励 R. T. ,在每个时间步中提供,为

R. T. = - θ T. 2 + 0. 1 θ T. ˙ 2 + 0. 001 T. - 1 2

这里:

  • θ T. 是从直立位置的位移角度。

  • θ T. ˙ 是位移角度的衍生物。

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

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

创建环境界面

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

Env = Rlpredefinedenv('SimpleDepulummodel连续'
env = 万博1manbetxSimulinkEnvWithAgent with properties: Model: rlSimplePendulumModel AgentBlock: rlSimplePendulumModel/RL Agent ResetFcn: [] UseFastRestart: on . env = SimulinkEnvWithAgent with properties: Model: rlSimplePendulumModel AgentBlock: rlSimplePendulumModel/RL Agent ResetFcn: [] UseFastRestart: on

该接口具有连续的动作空间,其中代理可以将-2至2 n·m之间的扭矩值施加到摆型。

将环境的观察设置为摆角,摆角的余弦和摆角衍生物的正弦。

numobs = 3;set_param('rlsimplepentulummodel / create观察'“ThetaObservationHandling”'sincos');

若要定义钟摆的初始条件为向下悬挂,请使用匿名函数句柄指定一个环境重置函数。这个重置函数设置模型工作空间变量Theta0.PI.

env.resetfcn = @(in)setVariable(在,“theta0”π,“工作区”、mdl);

指定模拟时间TF.和试剂取样时间TS.马上。

ts = 0.05;tf = 20;

修复了可重复性的随机生成器种子。

RNG(0)

创建DDPG代理

DDPG代理使用批评价值函数表示来估计长期奖励,给定观察和行动。要创建评论家,首先创建一个具有两个输入(状态和动作)和一个输出的深神经网络。有关创建深度神经网络值函数表示的更多信息,请参阅创建策略和值函数表示

statepath = [featureInputLayer(numobs,“归一化”'没有任何''名称'“观察”) fullyConnectedLayer (400,'名称'“CriticStateFC1”)剥离('名称''rictrelu1') fullyConnectedLayer (300,'名称'“CriticStateFC2”));actionPath = [featureInputLayer(1,“归一化”'没有任何''名称''行动') fullyConnectedLayer (300,'名称'“CriticActionFC1”'biaslearnratefactor', 0)];commonPath = [addtionlayer (2,'名称''添加')剥离('名称'“CriticCommonRelu”)全康连接层(1,'名称''批评'));criticNetwork = layerGraph ();criticNetwork = addLayers (criticNetwork statePath);criticNetwork = addLayers (criticNetwork actionPath);criticNetwork = addLayers (criticNetwork commonPath);criticNetwork = connectLayers (criticNetwork,“CriticStateFC2”“添加/三机一体”);criticNetwork = connectLayers (criticNetwork,“CriticActionFC1”'添加/ in2');

查看批评批评网络配置。

图绘制(criticNetwork)

图包含轴。轴包含Type Graphplot的对象。

指定使用批评者的选项rlrepresentationOptions.

criticOpts = rlRepresentationOptions ('学习',1e-03,“GradientThreshold”1);

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

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

DDPG代理决定使用演员表示获取观察的行动。要创建演员,首先创建一个输入的深度神经网络,一个输入,观察和一个输出,动作。

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

ActorNetWork = [FeatureInputLayer(numobs,“归一化”'没有任何''名称'“观察”) fullyConnectedLayer (400,'名称''actorfc1')剥离('名称'“ActorRelu1”) fullyConnectedLayer (300,'名称''Actorfc2')剥离('名称'“ActorRelu2”)全康连接层(1,'名称''Actorfc3') tanhLayer ('名称'“ActorTanh”) scalingLayer ('名称'“ActorScaling”“规模”,max(actinfo.upperlimit))];Actoropts = RlR​​epresentationOptions('学习',1e-04,“GradientThreshold”1);演员= rlDeterministicActorRepresentation (actorNetwork obsInfo actInfo,'观察', {“观察”},“行动”, {“ActorScaling”},actoropts);

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

agentOpts = rlDDPGAgentOptions (......“SampleTime”Ts,......“TargetSmoothFactor”,1e-3,......'经验BufferLength',1e6,......“DiscountFactor”,0.99,......'minibatchsize',128);代理.NoiseOptions.StandardDeviation = 0.6;代理.NoiseOptions.StandardDeviationdecayrate = 1E-5;

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

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

火车代理

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

  • 训练最多50000集,每集最多持续CEIL(TF / TS)时间步骤。

  • 在Episode Manager对话框中显示培训进度(设置情节选项),并禁用命令行显示(设置详细的选择错误的)。

  • 当代理在连续五次发作超过-740的平均累积奖励时停止培训。此时,代理商可以使用最小的控制工作快速平衡摆锤的摆锤。

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

有关更多信息,请参阅rlTrainingOptions

maxepisodes = 5000;maxsteps = ceil(tf / ts);训练= rltrainingOptions(......“MaxEpisodes”,maxepisodes,......“MaxStepsPerEpisode”maxsteps,......'scoreaveragingwindowlength'5,......“详细”假的,......'plots''培训 - 进步'......'stoptrinaincriteria'“AverageReward”......“StopTrainingValue”, -740,......'SaveAgentCriteria''EpisodeReward'......'SaveagentValue',-740);

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

doTraining = false;如果用圆形%训练代理人。trainingStats =火车(代理,env, trainOpts);其他的%为示例加载预训练的代理。加载('万博1manbetxsimulinkpendulumddpg.mat''代理人'结尾

模拟DDPG代理

要验证培训的代理的性能,请在摆内环境中模拟它。有关代理模拟的更多信息,请参阅rlSimulationOptionsSIM

simOptions = rlSimulationOptions (“MaxSteps”,500);体验= SIM(ENV,Agent,SimOptions);

图简单的柱形可视化器包含轴。轴包含2个类型的线,矩形。

也可以看看

||

相关话题