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

这个例子展示了如何训练一个深度确定性策略梯度(DDPG)代理来控制一个在MATLAB®中建模的二阶动态系统。

有关DDPG代理的详细信息,请参阅深确定性政策梯度代理。举一个例子说列车一个DDPG剂的Simulink,见万博1manbetx火车DDPG代理摆起和平衡摆

双积分MATLAB环境

本例中的强化学习环境是一个二阶系统,它是一个带增益的二重积分器。训练目标是通过施加一个力输入来控制二阶系统中物体的位置。

对于这个环境:

  • 质量开始于的+/- 4个单位的初始位置。

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

  • 来自环境的观测是质量的位置和速度。

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

  • 奖励 [R Ť ,在每个时间步长提供,为的离散化 [R Ť

[R Ť = - X Ť Q X Ť + ü Ť [R ü Ť

哪里:

  • X 是质量的状态向量。

  • ü 是应用于大规模的力量。

  • Q 是控制性能的权重。 Q = [ 10 0 ; 0 1 ]

  • [R 是控制努力的重量。 [R = 0 01

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

创建环境接口

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

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剂

甲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”“代理人”);结束

模拟DDPG代理

为了验证训练有素剂的性能,模拟它的双积分的环境中。有关代理仿真的更多信息,请参阅rlSimulationOptionsSIM卡

simOptions = rlSimulationOptions (“MaxSteps”,500);经验= SIM(ENV,代理,simOptions);

totalReward =总和(experience.Reward)
totalReward =-65.9933

也可以看看

相关的话题