此示例演示如何使用基线训练策略梯度(PG)代理来控制在MATLAB®中建模的二阶动态系统。
有关无基线的基本PG代理的更多信息,请参见示例训练PG代理平衡车杆系统.
本例的强化学习环境是具有增益的二阶双积分器系统。训练目标是通过施加一个力输入来控制质量在二阶系统中的位置。
对于这个环境:
质量从-2到2个单位的初始位置开始。
agent对环境的力作用信号为-2到2 N。
从环境中观察到的是物体的位置和速度。
如果质量偏离原位置超过5米或 .
奖赏 ,在每个时间步,是离散化的 :
在这里:
是质量的状态向量。
是施加在质量上的力。
是控制性能的权重; .
是控制重量的努力; .
有关此模型的更多信息,请参见加载预定义的控制系统环境.
为摆创建一个预定义的环境接口。
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代理使用参与者表示法在给定观察值的情况下决定要执行的操作。要创建参与者,请首先创建一个包含一个输入(观察值)和一个输出(操作)的深度神经网络。有关创建深度神经网络值函数表示法的更多信息,请参阅创建策略和值函数表示.
actorNetwork = [featureInputLayer(numobobservations,“归一化”,“没有”,“姓名”,“状态”) fullyConnectedLayer (numActions“姓名”,“行动”,“BiasLearnRateFactor”, 0)];
使用指定参与者表示的选项rlRepresentationOptions
.
actorOpts=rlRepresentationOptions(“LearnRate”, 5 e - 3,“GradientThreshold”1);
使用指定的深度神经网络和选项创建参与者表示。还必须指定从环境界面获得的批评家的操作和观察信息。有关更多信息,请参阅rlStochasticActorRepresentation
.
演员= rlStochasticActorRepresentation (actorNetwork obsInfo actInfo,“观察”, {“状态”},actorOpts);
随状态变化的基线可以减少更新预期值的方差,从而提高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)
训练代理人使用火车
函数。训练这个代理是一个计算密集型的过程,需要几分钟才能完成。为了节省运行此示例的时间,请通过设置加载预先训练过的代理溺爱
到假的
.自己训练代理人,设置溺爱
到真正的
.
doTraining = false;如果溺爱%培训代理人。trainingStats =火车(代理,env, trainOpts);其他的%加载示例的预训练参数。装载(“doubleIntegrationPGBaseline.mat”);结束
要验证经过训练的代理的性能,请在双积分器环境中对其进行模拟。有关代理模拟的详细信息,请参见rlSimulationOptions
和模拟
.
simOptions = rlSimulationOptions (“MaxSteps”,500);经验=sim(环境、代理、sim选项);
totalReward=总和(经验奖励)
totalReward = -43.0392
Richard S. Sutton和Andrew G. Barto。强化学习:导论.第二版。自适应计算和机器学习系列。麻省理工学院出版社,2018年。