这个例子展示了如何训练一个具有基线的策略梯度(PG) agent来控制一个在MATLAB®中建模的二阶动态系统。
有关没有基线的基本PG代理的更多信息,请参见示例培训PG代理以平衡车柱系统.
本例中的强化学习环境是一个具有增益的二阶双积分系统。训练目标是通过施加力输入来控制质量在二阶系统中的位置。
对于这种环境:
质量从–2和2个单位之间的初始位置开始。
从代理到环境的力作用信号为-2到2 N。
从环境中观察到的是质量的位置和速度。
如果质量从原始位置移动超过5 m,或者如果 .
奖励 ,在每个时间步提供,是对 :
在这里:
是质量的状态向量。
为作用于物体上的力。
为对控制性能的权重; .
是控制力的重量; .
有关此模型的详细信息,请参见加载预定义的控制系统环境.
为钟摆创建预定义的环境界面。
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 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);
您可以使用情节
在训练或模拟过程中发挥作用。
地块(环境)
使用火车
函数。培训此代理是一个计算密集型过程,需要几分钟才能完成。要在运行此示例时节省时间,请通过设置doTraining
来假
.要亲自培训特工,请设置doTraining
来符合事实的
.
doTraining=false;如果doTraining培训代理商。trainingStats=列车(代理人、环境、列车员);其他的%加载示例的预训练参数。负载(“DoubleIntegPGBaseline.mat”);结束
为了验证训练过的代理的性能,在双积分器环境中模拟它。有关代理模拟的更多信息,请参见模拟选项
和sim卡
.
simOptions=rlSimulationOptions(“MaxSteps”, 500);经验= sim (env,代理,simOptions);
totalReward =总和(experience.Reward)
总报酬=-43.0392
[1] 萨顿、理查德S.和安德鲁G.巴托。强化学习:简介. 第二版。自适应计算和机器学习系列。麻省剑桥:麻省理工学院出版社,2018年。