火车PG代理与基线控制双积分器系统
这个例子展示了如何训练策略梯度(PG)代理与基线控制MATLAB®的二阶动态系统建模。
更多信息的基本PG代理没有基线,看到的例子火车PG代理Cart-Pole平衡系统。
双积分器MATLAB环境
这个例子是一个二阶的强化学习环境双积分器系统增益。培训的目标是控制质量的位置输入二阶系统施加一个力。
对于这个环境:
质量始于2和2单位之间的初始位置。
力行动信号从代理环境从2到2 N。
来自环境的观测质量的位置和速度。
这一事件终止如果质量超过5 m或者从原始位置 。
奖励 ,只要在每一个时间步,是一个离散化 :
在这里:
状态向量的质量。
力应用于质量。
控制性能上的权重; 。
重量的控制工作; 。
关于这个模型的更多信息,请参阅负载预定义的控制系统环境。
创建双积分器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代理
验证培训代理的性能,模拟在双积分器的环境。代理模拟更多的信息,请参阅rlSimulationOptions
和sim卡
。
simOptions = rlSimulationOptions (MaxSteps = 500);经验= sim (env,代理,simOptions);
totalReward =总和(experience.Reward)
totalReward = -39.9140
引用
[1]萨顿,理查德·S。,安德鲁·g·Barto。强化学习:介绍。第二版。自适应计算和机器学习。剑桥,麻州:麻省理工学院出版社,2018年。