火车DDPG代理控制双积分系统

此示例显示如何培训深度确定性策略梯度(DDPG)代理以控制在Matlab®中建模的二阶动态系统。

有关DDPG代理商的更多信息,请参阅深度确定性政策梯度代理.有关如何在Simulink®中培训DDPG代理的示例,请参阅金宝app火车DDPG代理摇摆和平衡摆锤

双积分器Matlab环境

用于该示例的增强学习环境是具有增益的二阶双积分器系统。训练目标是通过应用力输入来控制二阶系统中的质量的位置。

对于这个环境:

  • 质量从-4到4之间的起始位置开始。

  • 从agent到环境的力作用信号是-2到2n。

  • 从环境中观察到的就是物体的位置和速度。

  • 如果质量从原始位置移动超过5米,或如果 | X | < 0. 01.

  • 奖励 R. T. 的离散化,在每个时间步中提供 R. T.

R. T. = - X T. ' 问: X T. + T. ' R. T.

这里:

  • X 是质量的状态向量。

  • 力量适用于质量。

  • 问: 是对控制性能的重量; 问: = [ 10. 0. ; 0. 1 ]

  • R. 是控制努力的重量; R. = 0. 01.

有关此模型的更多信息,请参见负载预定义控制系统环境

创建环境界面

为双积分系统创建预定义的环境界面。

Env = Rlpredefinedenv(“DoubleIntegrator-Continuous”
Env =双凝集器Continualaculeate
env。MaxForce =正;

该接口具有连续的动作空间,其中代理可以从 -弥撒。

从环境接口获取观察和操作信息。

ObsInfo = GetobservationInfo(ENV);numobservations = Obsinfo.dimension(1);Actinfo = GetActionInfo(Env);数量=数量(Actinfo);

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

RNG(0)

创建DDPG代理

DDPG代理使用评价值函数表示对给定的观察和行动的长期回报进行近似。要创建批评家,首先要创建一个深度神经网络,它有两个输入(状态和动作)和一个输出。有关创建神经网络值函数表示的更多信息,请参见创建策略和值函数表示

stalypath = imageInputLayer([numobservations 1 1],'正常化''没有任何''名称'“状态”);actionPath = imageInputLayer([numActions 1 1],'正常化''没有任何''名称''行动');commonpath = [concatenationlayer(1,2,'名称''concat') quadraticLayer ('名称'“二次”)全康连接层(1,'名称''endicevalue''biaslearnratefactor',0,'偏见', 0)];criticNetwork = layerGraph (statePath);criticNetwork = addLayers (criticNetwork actionPath);criticNetwork = addLayers (criticNetwork commonPath);criticNetwork = connectLayers (criticNetwork,“状态”'concat / In1');criticNetwork = connectLayers (criticNetwork,'行动''concat / In2');

查看批评批评网络配置。

图绘制(criticNetwork)

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

criticOpts = rlRepresentationOptions ('学习', 5 e - 3,'gradientthreshold'1);

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

评论家= rlqvalueerepresentation(批评,undernfo,Actinfo,'观察', {“状态”},“行动”, {'行动'}, criticOpts);

DDPG代理决定使用演员表示给予观察的行动。要创建演员,首先创建一个具有一个输入(观察)和一个输出(动作)的深神经网络。

以类似于评论家的方式构造演员。

= [imageInputLayer([numObservations 1 1]),'正常化''没有任何''名称'“状态”) fullyConnectedLayer (numActions'名称''行动''biaslearnratefactor',0,'偏见', 0)];actorOpts = rlRepresentationOptions ('学习',1E-04,'gradientthreshold'1);演员= rlDeterministicActorRepresentation (actorNetwork obsInfo actInfo,'观察', {“状态”},“行动”, {'行动'},actoropts);

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

agentOpts = rlDDPGAgentOptions (......'采样时间',env.ts,......“TargetSmoothFactor”,1e-3,......'经验BufferLength',1e6,......“DiscountFactor”,0.99,......'minibatchsize'、32);agentOpts.NoiseOptions.Variance = 0.3;agentOpts.NoiseOptions.VarianceDecayRate = 1 e-6;

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

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

火车代理

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

  • 在训练会话中最多1000个剧集运行,每个集发作持续最多200个时间步长。

  • 在Episode Manager对话框中显示培训进度(设置绘图选项)并禁用命令行显示(设置详细的选项)。

  • 当代理获得大于-66的移动平均累计奖励时,停止训练。在这一点上,代理可以用最小的控制努力控制质量的位置。

有关更多信息,请参见rlTrainingOptions

训练= rltrainingOptions(......“MaxEpisodes”, 5000,......“MaxStepsPerEpisode”,200,......'verbose', 错误的,......'plots''培训 - 进步'......'stoptrinaincriteria''AverageReward'......“StopTrainingValue”, -66);

您可以通过使用介绍双积分器环境阴谋培训或模拟期间的功能。

情节(env)

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

doTraining = false;如果用圆形%训练代理人。trainingStats =火车(代理,env, trainOpts);别的%加载预磨料的代理。加载(“DoubleIntegDDPG.mat”'代理人');结尾

模拟DDPG代理

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

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

TotalReward = Sum(经验.Rward)
totalReward =单身的-65.9933.

也可以看看

相关的话题