主要内容

使用基线培训PG代理以控制双积分系统

这个例子展示了如何训练一个具有基线的策略梯度(PG) agent来控制一个在MATLAB®中建模的二阶动态系统。

有关没有基线的基本PG代理的更多信息,请参见示例培训PG代理以平衡车柱系统

双积分器MATLAB环境

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

对于这种环境:

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

  • 从代理到环境的力作用信号为-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

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

创建双积分MATLAB环境接口

为钟摆创建预定义的环境界面。

env = rlPredefinedEnv (“双积分离散”
env = DoubleIntegratorDiscreteAction with properties: Gain: 1 Ts: 0.1000 MaxDistance: 5 GoalThreshold: 0.0100 Q: [2x2 double] R: 0.0100 MaxForce: 2 State: [2x1 double]

该界面有一个离散的作用空间,在这里,agent可以对质量施加三种可能的力值之一:-2,0,或2牛。

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

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

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

rng (0)

创建代理演员

一个PG代理决定采取什么行动,根据观察,使用演员代表。要创建参与者,首先要创建一个具有一个输入(观察)和一个输出(动作)的深度神经网络。有关创建深度神经网络值函数表示的更多信息,请参见创建策略和价值功能表示

actorNetwork=[featureInputLayer(numObservations,“正常化”“没有”“名字”“国家”)完全连接层(numActions,“名字”“行动”“BiasLearnRateFactor”,0)];

使用指定参与者表示的选项rlRepresentationOptions

actorOpts = rlRepresentationOptions (“LearnRate”,5e-3,“梯度阈值”,1);

使用指定的深度神经网络和选项创建参与者表示。您还必须为评论家指定从环境接口获得的操作和观察信息。有关更多信息,请参见随机表示

actor=rl随机性actor表示(actorNetwork、obsInfo、actInfo、,“观察”,{“国家”}, actorOpts);

创建PG代理基线

基线随状态变化,可以减少更新期望值的差异,从而提高PG agent的学习速度。基线的一个可能选择是状态值函数[1]的估计值。

在这种情况下,基线表示是一个具有一个输入(状态)和一个输出(状态值)的深度神经网络。

以与参与者类似的方式构建基线。

baselineNetwork = [featureInputLayer(numObservations,“正常化”“没有”“名字”“国家”)完全连接层(8,“名字”“BaselineFC”) reluLayer (“名字”“CriticRelu1”) fullyConnectedLayer (1,“名字”“BaselineFC2”“BiasLearnRateFactor”,0)]; baselineOpts=rlRepresentationOptions(“LearnRate”,5e-3,“梯度阈值”,1); 基线=rlValueRepresentation(基线网络、obsInfo、,“观察”,{“国家”}, baselineOpts);

要创建带有基线的PG代理,请使用rlPGAgentOptions设定使用基线选项设置为符合事实的

agentOpts=rlPGAgentOptions(...“UseBaseline”,真的,...“折扣演员”, 0.99);

然后使用指定的参与者表示、基线表示和代理选项创建代理。有关更多信息,请参见rlPGAgent

代理=rlPGAgent(参与者、基线、代理);

火车代理

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

  • 最多1000集,每集最多200步。

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

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

有关更多信息,请参见RL培训选项

trainOpts = rlTrainingOptions (...“最大集”, 1000,...“MaxStepsPerEpisode”, 200,...“冗长”错误的...“阴谋”“训练进步”...“StopTrainingCriteria”“平均向上”...“停止训练值”,-43);

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

地块(环境)

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

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

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

模拟PG代理

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

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

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

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

工具书类

[1] 萨顿、理查德S.和安德鲁G.巴托。强化学习:简介. 第二版。自适应计算和机器学习系列。麻省剑桥:麻省理工学院出版社,2018年。

另请参阅

相关话题