主要内容

培训DDPG Agent控制双积分系统

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

有关DDPG代理的更多信息,请参见深度确定性策略梯度代理.有关如何在Simulink®中培训DDPG代理的示例,请参见金宝app训练DDPG Agent上摆和平衡摆

双积分器MATLAB环境

本例的强化学习环境是一个具有增益的二阶双积分系统。训练目标是通过施加一个力输入来控制质量在二阶系统中的位置。

对于这种环境:

  • 质量从–4和4个单位之间的初始位置开始。

  • agent对环境的力作用信号为-2到2 N。

  • 从环境中观察到的是质量的位置和速度。

  • 如果质量从原始位置移动超过5 m,或者如果 | x | < 0 01

  • 奖励 r t ,在每个时间步提供,是对 r t

r t - x t x t + u t R u t

在这里:

  • x 是质量的状态向量。

  • u 为作用于物体上的力。

  • 为对控制性能的权重; 10 0 0 1

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

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

创建环境接口

为双集成商系统创建预定义的环境接口。

env = rlPredefinedEnv (“双积分连续”
env = DoubleIntegratorContinuousAction with properties: Gain: 1 Ts: 0.1000 MaxDistance: 5 GoalThreshold: 0.0100 Q: [2x2 double] R: 0.0100 MaxForce: Inf State: [2x1 double]
env.MaxForce=Inf;

界面有一个连续的作用空间,在这个空间中,代理可以从-施加力值InfInf的质量。

从环境界面获取观察和行动信息。

obsInfo = getObservationInfo (env);numObservations = obsInfo.Dimension (1);actInfo = getActionInfo (env);numActions =元素个数(actInfo);

修复随机生成器种子以获得再现性。

rng (0)

创建DDPG代理

DDPG代理使用临界值函数表示法近似给定观察和行动的长期回报。要创建临界值,首先创建一个包含两个输入(状态和行动)和一个输出的深度神经网络。有关创建神经网络值函数表示法的更多信息,请参阅创建策略和价值功能表示

statePath = imageInputLayer([numObservations 1 1],“归一化”“没有”“名字”“国家”);actionPath=imageInputLayer([numActions 1],“归一化”“没有”“名字”“行动”);commonPath = [concatenationLayer(1、2、“名字”“concat”)二次层(“名字”“二次”) fullyConnectedLayer (1,“名字”“StateValue”“BiasLearnRateFactor”0,“偏见”,0)]; 临界网络=层图(状态路径);criticNetwork=addLayers(criticNetwork,actionPath);临界网络=添加层(临界网络,公共路径);临界网络=连接层(临界网络,“国家”“concat /三机一体”);临界网络=连接层(临界网络,“行动”“concat / in2”);

查看critical网络配置。

图表(关键网络)

图中包含一个坐标轴。坐标轴包含一个graphplot类型的对象。

为使用的批评家表示指定选项rlRepresentationOptions

criticOpts=rlRepresentationOptions(“LearnRate”,5e-3,“GradientThreshold”,1);

使用指定的神经网络和选项创建批评家表示。还必须指定批评家的操作和观察信息,这些信息是从环境界面获得的。有关更多信息,请参阅rlQValueRepresentation

评论家= rlQValueRepresentation (criticNetwork obsInfo actInfo,“观察”,{“国家”},“行动”,{“行动”},批判者);

DDPG代理在给定的观察结果下,使用actor表示来决定采取什么行动。要创建参与者,首先要创建一个具有一个输入(观察)和一个输出(动作)的深度神经网络。

以与批评家相似的方式构造演员。

actorNetwork=[imageInputLayer([numObservations 1],“归一化”“没有”“名字”“国家”)完全连接层(numActions,“名字”“行动”“BiasLearnRateFactor”0,“偏见”,0)]; actorOpts=rlRepresentationOptions(“LearnRate”1 e-04“GradientThreshold”,1);actor=rlDeterministicActorRepresentation(actorNetwork、obsInfo、actInfo、,“观察”,{“国家”},“行动”,{“行动”}, actorOpts);

要创建DDPG代理,请首先使用指定DDPG代理选项rlDDPGAgentOptions

agentOpts=rlDDPGAgentOptions(...“SampleTime”env。Ts,...“目标平滑因子”1 e - 3,...“ExperienceBufferLength”1 e6,...“折扣演员”, 0.99,...“MiniBatchSize”、32);agentOpts.NoiseOptions.StandardDeviation = 0.3;agentOpts.NoiseOptions.StandardDeviationDecayRate = 1 e-6;

使用指定的参与者表示、评论家表示和代理选项创建DDPG代理。有关详细信息,请参阅rlDDPGAgent

代理= rlDDPGAgent(演员、评论家、agentOpts);

火车代理

要培训代理,首先指定培训选项。

  • 在训练过程中最多跑1000集,每集最多持续200步。

  • 在“插曲管理器”对话框中显示培训进度(设置情节选项),并禁用命令行显示(设置冗长的选项)。

  • 当代理收到大于–66的移动平均累积奖励时,停止训练。此时,代理可以使用最小的控制努力控制质量的位置。

有关详细信息,请参阅RL培训选项

trainOpts = rlTrainingOptions (...“最大集”, 5000,...“MaxStepsPerEpisode”, 200,...“详细”假的,...“阴谋”“训练进步”...“StopTrainingCriteria”“AverageReward”...“停止训练值”,-66);

您可以通过使用情节在训练或模拟过程中发挥作用。

地块(环境)

Figure Double Integrator Visualizer包含一个轴。这些轴包含一个矩形类型的对象。

使用火车函数。培训此代理是一个计算密集型过程,需要几个小时才能完成。要在运行此示例时节省时间,请通过设置doTraining.要亲自培训特工,请设置doTraining真的

doTraining=false;如果doTraining培训代理商。trainingStats=列车(代理人、环境、列车员);其他的%加载示例的预训练代理。负载(“双积分DDPG.mat”“代理”);结束

模拟DDPG代理

为了验证训练过的代理的性能,在双积分器环境中模拟它。有关代理模拟的更多信息,请参见模拟选项sim卡

simOptions=rlSimulationOptions(“MaxSteps”, 500);经验= sim (env,代理,simOptions);

Figure Double Integrator Visualizer包含一个轴。这些轴包含一个矩形类型的对象。

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

另请参阅

相关话题