主要内容

用基线训练PG Agent控制双积分器系统

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

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

双积分MATLAB环境

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

对于这个环境:

  • 质量从-2到2个单位的初始位置开始。

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

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

  • 如果质量偏离原位置超过5米或 | x | < 0 01

  • 奖赏 R T ,在每个时间步,是离散化的 R ( T ) :

R ( T ) = - ( x ( T ) Q x ( T ) + U ( T ) R U ( T ) )

在这里:

  • x 是质量的状态向量。

  • U 是施加在质量上的力。

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

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

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

创建双积分器MATLAB环境接口

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

env=rlPredefinedEnv(“DoubleIntegrator-Discrete”)
env=DoubleIntegrator属性离散化:增益:1 Ts:0.1000最大距离:5目标保留:0.0100 Q:[2x2 double]R:0.0100最大力:2状态:[2x1 double]

界面有一个离散的作用空间,在该空间中,代理可以将三个可能的力值之一应用于质量:-2、0或2 N。

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

obsInfo=getObservationInfo(env);numObservations=obsInfo.Dimension(1);actInfo=getActionInfo(env);numActions=numel(actInfo.Elements);

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

rng(0)

创建PG代理演员

PG代理使用参与者表示法在给定观察值的情况下决定要执行的操作。要创建参与者,请首先创建一个包含一个输入(观察值)和一个输出(操作)的深度神经网络。有关创建深度神经网络值函数表示法的更多信息,请参阅创建策略和值函数表示

actorNetwork = [featureInputLayer(numobobservations,“归一化”,“没有”,“姓名”,“状态”) fullyConnectedLayer (numActions“姓名”,“行动”,“BiasLearnRateFactor”, 0)];

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

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

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

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

创建PG Agent基线

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

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

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

baselineNetwork=[featureInputLayer(numObservations,“归一化”,“没有”,“姓名”,“状态”) fullyConnectedLayer (8,“姓名”,“基线FC”)雷卢耶(“姓名”,“CriticRelu1”)完全连接层(1,“姓名”,“基线FC2”,“BiasLearnRateFactor”, 0)];baselineOpts = rlRepresentationOptions (“LearnRate”, 5 e - 3,“GradientThreshold”1);基线= rlValueRepresentation (baselineNetwork obsInfo,“观察”, {“状态”},基线选项);

要使用基线创建PG代理,请使用指定PG代理选项rlPGAgentOptions并设置UseBaseline选项设置为真正的

agentOpts = rlPGAgentOptions (...“使用基线”是的,...“DiscountFactor”,0.99);

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

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

列车员

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

  • 最多运行1000集,每集最多持续200个时间步。

  • 在“事件管理器”对话框中显示培训进度(设置阴谋选项)并禁用命令行显示(设置详细的选项)。

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

有关更多信息,请参见rlTrainingOptions

培训选项=RL培训选项(...“MaxEpisodes”,1000,...“MaxStepsPerEpisode”,200,...“详细”假的,...“情节”,“培训进度”,...“停止培训标准”,“AverageReward”,...“StopTrainingValue”, -43);

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

情节(env)

图Double Integrator Visualizer包含一个轴。坐标轴包含一个矩形类型的对象。

训练代理人使用火车函数。训练这个代理是一个计算密集型的过程,需要几分钟才能完成。为了节省运行此示例的时间,请通过设置加载预先训练过的代理溺爱假的.自己训练代理人,设置溺爱真正的

doTraining = false;如果溺爱%培训代理人。trainingStats =火车(代理,env, trainOpts);其他的%加载示例的预训练参数。装载(“doubleIntegrationPGBaseline.mat”);结束

模拟PG代理

要验证经过训练的代理的性能,请在双积分器环境中对其进行模拟。有关代理模拟的详细信息,请参见rlSimulationOptions模拟

simOptions = rlSimulationOptions (“MaxSteps”,500);经验=sim(环境、代理、sim选项);

图Double Integrator Visualizer包含一个轴。坐标轴包含一个矩形类型的对象。

totalReward=总和(经验奖励)
totalReward = -43.0392

参考文献

Richard S. Sutton和Andrew G. Barto。强化学习:导论.第二版。自适应计算和机器学习系列。麻省理工学院出版社,2018年。

另见

相关的话题