主要内容

火车PG代理与基线控制双积分器系统

这个例子展示了如何训练策略梯度(PG)代理与基线控制MATLAB®的二阶动态系统建模。

更多信息的基本PG代理没有基线,看到的例子火车PG代理Cart-Pole平衡系统

双积分器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 (“DoubleIntegrator-Discrete”)
env = DoubleIntegratorDiscreteAction属性:增加:1 Ts: 0.1000 MaxDistance: 5 GoalThreshold: 0.0100问:[2 x2双]R: 0.0100 MaxForce: 2状态:[2 x1双)

代理的接口有一个离散的行动空间可以应用三种可能的力值质量:2 0,或者2 N。

从环境中获得的观察和操作信息界面。

obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

解决随机发生器再现性的种子。

rng (0)

创建PG代理演员

政策梯度代理、演员执行随机政策离散行动空间由离散近似分类的演员。这个演员必须观察信号作为输入,并返回一个概率为每一个行动。

近似策略中的演员,使用神经网络。定义网络层对象数组和一个输入(观察)和一个输出(行动),并获得观测空间的维数,从环境中可能的行动规范对象。更多信息创建一个深层神经网络价值函数表示,看到的创建政策和价值功能

actorNet = [featureInputLayer (obsInfo.Dimension (1) fullyConnectedLayer(元素个数(actInfo.Elements)));

转换为dlnetwork并显示权重的数量。

actorNet = dlnetwork (actorNet);总结(actorNet)
初始化:可学的真正的数量:2 9输入:1“输入”功能

指定培训选项的演员。有关更多信息,请参见rlOptimizerOptions。或者,您可以更改代理(包括演员和评论家)选项使用点符号后创建代理。

actorOpts = rlOptimizerOptions (LearnRate = 5 e - 3,GradientThreshold = 1);

创建一个演员表示使用神经网络和环境规范的对象。有关更多信息,请参见rlDiscreteCategoricalActor

演员= rlDiscreteCategoricalActor (actorNet obsInfo actInfo);

返回的可能行为的概率分布的函数随机观察,鉴于当前网络的权重,使用评估

复审委员会=评估(演员,{兰德(obsInfo.Dimension)})
复审委员会=1 x1单元阵列{3 x1单}
复审委员会{1}
ans =3 x1单一列向量0.4994 0.3770 0.1235

创建PG代理基线

PG代理算法,(也称为强化)返回可以比作一个基线,取决于状态。这可以减少预期值的方差的更新,从而提高学习的速度。一个可能的选择基线估计的价值函数[1]。

必须接受一个观测值函数的估计值对象作为输入,并返回一个标量(估计折扣累积长期奖励)作为输出。使用神经网络作为近似模型。层对象的网络定义为一个数组,并获得观测空间的维数和可能的行动环境规范的对象。

baselineNet = [featureInputLayer (obsInfo.Dimension (1) fullyConnectedLayer (8) reluLayer fullyConnectedLayer (1)];

转换为dlnetwork并显示权重的数量。

baselineNet = dlnetwork (baselineNet);

创建基线值函数近似者使用baselineNet,观测规范。有关更多信息,请参见rlValueFunction

基线= rlValueFunction (baselineNet obsInfo);

检查随机观察输入基线。

getValue(基线,{兰德(obsInfo.Dimension)})
ans =0.2152

指定一些培训选择基线。

baselineOpts = rlOptimizerOptions (LearnRate = 5 e - 3,GradientThreshold = 1);

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

agentOpts = rlPGAgentOptions (UseBaseline = true,ActorOptimizerOptions = actorOpts,CriticOptimizerOptions = baselineOpts);

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

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

检查代理使用一个随机观察输入。

getAction(代理,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[0]}

火车代理

培训代理商,首先指定培训选项。对于这个示例,使用以下选项。

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

  • 在事件管理器对话框显示培训进展(设置情节在命令行选项)和禁用显示(设置详细的选项)。

  • 停止训练当代理接收到移动平均累积奖励大于-45。在这一点上,代理可以控制质量的位置使用最少的控制工作。

有关更多信息,请参见rlTrainingOptions

trainOpts = rlTrainingOptions (MaxEpisodes = 1000,MaxStepsPerEpisode = 200,Verbose = false,情节=“训练进步”,StopTrainingCriteria =“AverageReward”,StopTrainingValue = -43);

你可以想象双积分器系统使用情节函数在训练或模拟。

情节(env)

{“字符串”:“图双积分器可视化工具包含一个坐标轴对象。坐标轴对象包含一个类型的对象的矩形。“,”泰克斯”:[],“乳胶”:[]}

火车代理使用火车函数。培训这个代理是一个计算密集型的过程需要几分钟才能完成。节省时间在运行这个例子中,加载一个pretrained代理设置doTraining。训练自己代理,集doTraining真正的

doTraining = false;如果doTraining%培训代理。trainingStats =火车(代理,env, trainOpts);其他的%加载pretrained参数的例子。负载(“DoubleIntegPGBaseline.mat”);结束

模拟PG代理

验证培训代理的性能,模拟在双积分器的环境。代理模拟更多的信息,请参阅rlSimulationOptionssim卡

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

{“字符串”:“图双积分器可视化工具包含一个坐标轴对象。坐标轴对象包含一个类型的对象的矩形。“,”泰克斯”:[],“乳胶”:[]}

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

引用

[1]萨顿,理查德·S。,安德鲁·g·Barto。强化学习:介绍。第二版。自适应计算和机器学习。剑桥,麻州:麻省理工学院出版社,2018年。

另请参阅

相关的话题