这个例子展示了如何训练一个深度确定性策略梯度(DDPG)代理来控制一个在MATLAB®中建模的二阶动态系统。
有关DDPG代理的详细信息,请参阅深确定性政策梯度代理。举一个例子说列车一个DDPG剂的Simulink,见万博1manbetx火车DDPG代理摆起和平衡摆。
本例中的强化学习环境是一个二阶系统,它是一个带增益的二重积分器。训练目标是通过施加一个力输入来控制二阶系统中物体的位置。
对于这个环境:
质量开始于的+/- 4个单位的初始位置。
从代理到环境的力作用的信号是从-
2到2n。
来自环境的观测是质量的位置和速度。
如果质量移动超过5米
从原来的位置,或者如果
奖励 ,在每个时间步长提供,为的离散化 :
哪里:
是质量的状态向量。
是应用于大规模的力量。
是控制性能的权重。
是控制努力的重量。
有关此模型的更多信息,请参见预定义加载控制系统环境。
为摆锤创建一个预定义的环境接口。
ENV = rlPredefinedEnv(“DoubleIntegrator-Continuous”)
ENV = DoubleIntegratorContinuousAction与属性:增益:1 TS:0.1000 MaxDistance:5 GoalThreshold:0.0100问:[2×2双] R:0.0100 MaxForce:Inf文件州:[2×1双]
env。MaxForce =正;
该接口有一个连续的动作空间,代理可以从应用力值 -正
至正
到大众。
从环境接口获取观察和动作信息。
obsInfo = getObservationInfo(ENV);numObservations = obsInfo.Dimension(1);actInfo = getActionInfo(ENV);numActions = numel(actInfo);
修正随机生成器种子的可重复性。
RNG(0)
甲DDPG剂近似于长期奖励给定的观察和使用评论家值函数表示的动作。为了创建评论家,首先创建具有两个输入,状态和动作,和一个输出的深神经网络。有关创建一个神经网络值函数表示的更多信息,请参阅创建策略和价值功能交涉。
statePath = imageInputLayer([numobservation11],“归一化”,'没有','名称',“状态”);actionPath = imageInputLayer([numActions 11],“归一化”,'没有','名称','行动');文件版本= [concatenationLayer(1,2,'名称','CONCAT')quadraticLayer ('名称',“二次”)fullyConnectedLayer(1,'名称','StateValue','BiasLearnRateFactor'0,'偏压',0)];criticNetwork = layerGraph (statePath);criticNetwork = addLayers (criticNetwork actionPath);criticNetwork = addLayers (criticNetwork commonPath);criticNetwork = connectLayers (criticNetwork,“状态”,'的concat / IN1');criticNetwork = connectLayers (criticNetwork,'行动','的concat /英寸2');
查看评论家的网络配置。
图绘制(criticNetwork)
指定使用评论家表示选项rlRepresentationOptions
。
criticOpts = rlRepresentationOptions ('LearnRate',5 e - 3,“GradientThreshold”1);
使用指定的神经网络和选项创建批评家表示。您还必须指定批评家的操作和观察信息,这些信息是从环境接口获得的。有关更多信息,请参见rlQValueRepresentation
。
评论家= rlQValueRepresentation(criticNetwork,obsInfo,actInfo,“观察”,{“状态”},“行动”,{'行动'},criticOpts);
一个DDPG代理决定其行动使用演员表示采取给予意见。要创建演员,第一个输入,观察,和一个输出,动作创造深层神经网络。
同样构建演员评论家。
actorNetwork = [imageInputLayer([numObservations 11]),“归一化”,'没有','名称',“状态”)fullyConnectedLayer (numActions'名称','行动','BiasLearnRateFactor'0,'偏压',0)];actorOpts = rlRepresentationOptions ('LearnRate',1E-04,“GradientThreshold”1);演员= rlDeterministicActorRepresentation (actorNetwork obsInfo actInfo,“观察”,{“状态”},“行动”,{'行动'},actorOpts);
要创建DDPG代理,首先使用以下命令指定DDPG代理选项rlDDPGAgentOptions
。
agentOpts = rlDDPGAgentOptions (...“SampleTime”,env.Ts,...“TargetSmoothFactor”,1E-3,...'ExperienceBufferLength',1E6,...“DiscountFactor”,0.99,...'MiniBatchSize'、32);agentOpts.NoiseOptions。方差= 0.3;agentOpts.NoiseOptions。VarianceDecayRate = 1 e-6;
然后,使用指定的参与者表示、批评家表示和代理选项创建DDPG代理。有关更多信息,请参见rlDDPGAgent
。
剂= rlDDPGAgent(演员,评论家,agentOpts);
要培训代理,首先指定培训选项。对于本例,使用以下选项:
在培训会上最1000个集运行,每次发作持续至多200个时间步。
显示在情节管理器对话框的训练进度(设置地块
选项)和禁用命令行显示(设定详细的
选项)。
停止训练当代理接收比-66的移动平均累积奖励更大。在这一点上,代理可以控制使用最少的控制工作质量的位置。
有关更多信息,请参见rlTrainingOptions
。
trainOpts = rlTrainingOptions(...“MaxEpisodes”,5000,...“MaxStepsPerEpisode”,200,...“详细”,假的,...“情节”,“训练进度”,...'StopTrainingCriteria','AverageReward',...“StopTrainingValue”,-66);
双积分系统可以与可视化情节(env)
在训练或模拟过程中。
情节(env)
使用。训练代理培养
函数。这是一个计算密集型的过程,需要几个小时才能完成。要在运行此示例时节省时间,请通过设置加载预训练的代理doTraining
至假
。自己训练特工,集合doTraining
至真正的
。
doTraining = false;如果doTraining%培训代理。trainingStats =火车(代理,env, trainOpts);其他%负载预训练剂的例子。加载(“DoubleIntegDDPG.mat”,“代理人”);结束
为了验证训练有素剂的性能,模拟它的双积分的环境中。有关代理仿真的更多信息,请参阅rlSimulationOptions
和SIM卡
。
simOptions = rlSimulationOptions (“MaxSteps”,500);经验= SIM(ENV,代理,simOptions);
totalReward =总和(experience.Reward)
totalReward =单-65.9933