此示例显示如何培训深度确定性策略梯度(DDPG)代理以控制在Matlab®中建模的二阶动态系统。
有关DDPG代理商的更多信息,请参阅深度确定性政策梯度代理.有关如何在Simulink®中培训DDPG代理的示例,请参阅金宝app火车DDPG代理摇摆和平衡摆锤.
用于该示例的增强学习环境是具有增益的二阶双积分器系统。训练目标是通过应用力输入来控制二阶系统中的质量的位置。
对于这个环境:
质量从-4到4之间的起始位置开始。
从agent到环境的力作用信号是-2到2n。
从环境中观察到的就是物体的位置和速度。
如果质量从原始位置移动超过5米,或如果 .
奖励 的离散化,在每个时间步中提供 :
这里:
是质量的状态向量。
力量适用于质量。
是对控制性能的重量; .
是控制努力的重量; .
有关此模型的更多信息,请参见负载预定义控制系统环境.
为双积分系统创建预定义的环境界面。
Env = Rlpredefinedenv(“DoubleIntegrator-Continuous”)
Env =双凝集器Continualaculeate
env。MaxForce =正;
该接口具有连续的动作空间,其中代理可以从 -正
至正
弥撒。
从环境接口获取观察和操作信息。
ObsInfo = GetobservationInfo(ENV);numobservations = Obsinfo.dimension(1);Actinfo = GetActionInfo(Env);数量=数量(Actinfo);
修复了可重复性的随机生成器种子。
RNG(0)
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”那'代理人');结尾
要验证培训的代理的性能,请在双积分器环境中模拟它。有关代理模拟的更多信息,请参阅rlSimulationOptions
和SIM
.
simOptions = rlSimulationOptions (“MaxSteps”,500);体验= SIM(ENV,Agent,SimOptions);
TotalReward = Sum(经验.Rward)
totalReward =单身的-65.9933.