主要内容

对PG人员进行基线控制双积分器系统的培训

此示例显示如何使用基线训练策略梯度(PG)代理以控制在MATLAB®中建模的二阶动态系统。

有关没有基线的基本PG代理的更多信息,请参阅示例训练PG代理平衡车-杆系统

双积分器Matlab环境

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

对于这个环境:

  • 质量开始于-2到2个单位之间的初始位置。

  • 从agent到环境的力作用信号为-2 ~ 2n。

  • 从环境中观测到的是物体的位置和速度。

  • 如果质量距离初始位置超过5米,或者如果 | X | < 0. 01.

  • 奖励 R. T. 的离散化 R. T.

R. T. = - X T. ' 问: X T. + T. ' R. T.

这里:

  • X 是质量的状态向量。

  • 力量适用于质量。

  • 问: 是对控制性能的重量; 问: = [ 10. 0. ; 0. 1 ]

  • R. 是控制努力的权重; R. = 0. 01.

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

创建双积分器MATLAB环境界面

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

Env = Rlpredefinedenv(“DoubleIntegrator-Discrete”
Env =双管AregratorDiscretEacretEacreAction与房产:GAIN:1 TS:0.1000 Maxdistance:5守队列:0.0100 Q:[2x2双] R:0.0100 Maxiforce:2状态:[2x1双]

该接口具有离散的动作空间,其中代理可以将三种可能的力值中的一个应用于质量:-2,0或2 n。

从环境接口获取观测和动作信息。

ObsInfo = GetobservationInfo(ENV);numobservations = Obsinfo.dimension(1);Actinfo = GetActionInfo(ENV);数量= numel(Actinfo.Elements);

修复了随机生成器种子的再现性。

RNG(0)

创建PG代理演员

PG代理决定使用演员表示给予观察的行动。要创建演员,首先创建一个具有一个输入(观察)和一个输出(动作)的深神经网络。有关创建深度神经网络值函数表示的更多信息,请参阅创建策略和值函数表示

actorNetwork = [featureInputLayer(numObservations,“归一化”'没有''名称'“状态”) fullyConnectedLayer (numActions'名称''行动''biaslearnratefactor', 0)];

指定使用的Actor表示的选项rlrepresentationOptions.

Actoropts = RlR​​epresentationOptions('学习', 5 e - 3,“GradientThreshold”1);

使用指定的深神经网络和选项创建演员表示。您还必须指定从环境界面获取的批评者的操作和观察信息。有关更多信息,请参阅rlStochasticActorRepresentation

演员= rlStochasticActorRepresentation (actorNetwork obsInfo actInfo,'观察', {“状态”},actoropts);

创建PG代理基线

随状态而变化的基线可以减少更新的预期值的方差,从而提高PG代理的学习速度。基线可能的选择是对状态值函数的估计[1]。

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

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

baselinenetwork = [featureInputLayer(numobservations,“归一化”'没有''名称'“状态”) fullyConnectedLayer (8,'名称''BaselineFC')剥离('名称'“CriticRelu1”)全康连接层(1,'名称''BaselineFC2''biaslearnratefactor', 0)];baselineOpts = rlRepresentationOptions ('学习', 5 e - 3,“GradientThreshold”1);基线= rlValueRepresentation (baselineNetwork obsInfo,'观察', {“状态”},基线);

要使用基线创建PG代理,请使用以下方式指定PG代理选项rlpgagentoptions.并设置UseBaseline选项设置为真正的

agentOpts = rlPGAgentOptions (......'umermbaseline',真正,......“DiscountFactor”,0.99);

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

代理= rlPGAgent(演员、基线、agentOpts);

火车代理

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

  • 以最多1000个剧集运行,每个集发作持续最多200个时间步长。

  • 在Episode Manager对话框中显示培训进度(设置绘图选项)并禁用命令行显示(设置详细的选项)。

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

有关更多信息,请参阅rlTrainingOptions

训练= rltrainingOptions(......“MaxEpisodes”,1000,......“MaxStepsPerEpisode”,200,......“详细”假的,......'plots''培训 - 进步'......'stoptrinaincriteria'“AverageReward”......“StopTrainingValue”, -43);

你可以用情节培训或模拟期间的功能。

情节(env)

培训代理使用培养函数。训练这个代理是一个计算密集型的过程,需要几分钟才能完成。为了在运行这个示例时节省时间,可以通过设置加载一个预先训练好的代理用圆形。亲自训练特工,集合用圆形真正的

doTraining = false;如果用圆形%训练代理人。trainingStats =火车(代理,env, trainOpts);其他的%加载示例的预磨削参数。加载('doupleintegpgbaseline.mat');结束

模拟PG代理

要验证培训的代理的性能,请在双积分器环境中模拟它。有关代理模拟的更多信息,请参阅rlSimulationOptionsSIM

simOptions = rlSimulationOptions (“MaxSteps”,500);体验= SIM(ENV,Agent,SimOptions);

TotalReward = Sum(经验.Rward)
totalReward = -43.0392

参考文献

Richard S. Sutton和Andrew G. Barto。强化学习:介绍。第二版。自适应计算和机器学习系列。马萨诸塞州剑桥:麻省理工学院出版社,2018年。

也可以看看

相关的话题