此示例显示如何使用基线训练策略梯度(PG)代理以控制在MATLAB®中建模的二阶动态系统。
有关没有基线的基本PG代理的更多信息,请参阅示例训练PG代理平衡车-杆系统。
本例的强化学习环境是带增益的二阶双积分系统。训练目标是通过施加一个力的输入来控制质量在二阶系统中的位置。
对于这个环境:
质量开始于-2到2个单位之间的初始位置。
从agent到环境的力作用信号为-2 ~ 2n。
从环境中观测到的是物体的位置和速度。
如果质量距离初始位置超过5米,或者如果 。
奖励 的离散化 :
这里:
是质量的状态向量。
力量适用于质量。
是对控制性能的重量; 。
是控制努力的权重; 。
有关此模型的更多信息,请参见负载预定义控制系统环境。
为钟摆创建一个预定义的环境接口。
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代理决定使用演员表示给予观察的行动。要创建演员,首先创建一个具有一个输入(观察)和一个输出(动作)的深神经网络。有关创建深度神经网络值函数表示的更多信息,请参阅创建策略和值函数表示。
actorNetwork = [featureInputLayer(numObservations,“归一化”那'没有'那'名称'那“状态”) fullyConnectedLayer (numActions'名称'那'行动'那'biaslearnratefactor', 0)];
指定使用的Actor表示的选项rlrepresentationOptions.
。
Actoropts = RlRepresentationOptions('学习', 5 e - 3,“GradientThreshold”1);
使用指定的深神经网络和选项创建演员表示。您还必须指定从环境界面获取的批评者的操作和观察信息。有关更多信息,请参阅rlStochasticActorRepresentation
。
演员= rlStochasticActorRepresentation (actorNetwork obsInfo actInfo,'观察', {“状态”},actoropts);
随状态而变化的基线可以减少更新的预期值的方差,从而提高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');结束
要验证培训的代理的性能,请在双积分器环境中模拟它。有关代理模拟的更多信息,请参阅rlSimulationOptions
和SIM
。
simOptions = rlSimulationOptions (“MaxSteps”,500);体验= SIM(ENV,Agent,SimOptions);
TotalReward = Sum(经验.Rward)
totalReward = -43.0392
Richard S. Sutton和Andrew G. Barto。强化学习:介绍。第二版。自适应计算和机器学习系列。马萨诸塞州剑桥:麻省理工学院出版社,2018年。