这个例子展示了如何训练一个演员-评论家(AC)代理来平衡一个在MATLAB®中建模的车杆系统。
有关交流代理商的更多信息,请参阅Actor-Critic代理.有关如何使用并行计算训练AC代理的示例,请参阅用并行计算训练交流Agent平衡车杆系统.
本例的强化学习环境是一个连接在小车上的非驱动关节上的杆,它沿着无摩擦的轨道移动。训练目标是使钟摆直立而不摔倒。
对于这个环境:
向上平衡的摆锤位置是0
弧度和向下悬挂的位置是PI.
弧度。
摆锤直立,初始角度在-0.05和0.5°之间。
来自代理到环境的力动作信号为-10至10 n。
从环境中观察到的是小车的位置和速度、摆角和摆角的导数。
如果杆距垂直方向超过12度,或者车距初始位置移动超过2.4米,则该插曲终止。
每次步骤都提供了+1的奖励,杆保持直立。当摆锤下降时,应用了-5的惩罚。
有关此模型的更多信息,请参阅加载预定义的控制系统环境.
为摆锤创建预定义的环境界面。
env = rlPredefinedEnv (“cartpole - 离散”)
Env = CartpoledIscreteAcreacteAdeaction:重力:1 9.8000 Masscart:1 MassPole:0.1000
env。PenaltyForFalling = -10;
该接口具有离散的动作空间,其中代理可以将两个可能的力值中的一个应用于推车,-10或10 n。
从环境界面获取观察和动作信息。
ObsInfo = GetobservationInfo(ENV);Actinfo = GetActionInfo(ENV);
修复随机发生器种子以进行再现性。
rng (0)
AC代理使用批评价值函数表示来估计长期奖励,给定观察和行动。要创建评论家,首先创建一个具有一个输入(观察)和一个输出(状态值)的深神经网络。批评网络的输入大小为4,因为环境有四个观察。有关创建深度神经网络值函数表示的更多信息,请参阅创建策略和价值功能表示.
批评家= [featureInputLayer(4,“归一化”,“没有”,“名字”,'状态') fullyConnectedLayer (1,“名字”,“CriticFC”)];
为使用的批评家表示指定选项rlRepresentationOptions
.
批评= rlrepresentationOptions(“LearnRate”, 8 e - 3,“GradientThreshold”,1);
使用指定的深度神经网络和选项创建批读表示。您还必须指定从环境界面获取的批评的操作和观察信息。有关更多信息,请参见rlValueRepresentation
.
评论家= rlValueRepresentation (criticNetwork obsInfo,“观察”,{'状态'},批评);
在给定的观察结果下,AC代理使用一个参与者表示来决定采取哪个动作。要创建参与者,需要创建一个具有一个输入(观察)和一个输出(动作)的深度神经网络。actor网络的输出大小是2,因为环境有两个可能的动作,-10和10。
以与评论家相似的方式构造行动者。有关更多信息,请参见rlstochastorrepresentation
.
ActorNetWork = [FeatureInputLayer(4,“归一化”,“没有”,“名字”,'状态') fullyConnectedLayer (2“名字”,'fc') softmaxLayer (“名字”,'actionprob')];Actoropts = RlRepresentationOptions(“LearnRate”, 8 e - 3,“GradientThreshold”,1);Actor = rlstochastOrtorrepresentation(Actornetwork,Obsinfo,Actinfo,...“观察”,{'状态'}, actorOpts);
要创建AC代理,首先使用rlacagentoptions.
.
agentOpts = rlACAgentOptions (...'numstepstolookahead'32岁的...'贴花因子', 0.99);
然后使用指定的参与者表示和默认代理选项创建代理。有关更多信息,请参见rlACAgent
.
代理= rlACAgent(演员、评论家、agentOpts);
要培训代理,首先指定培训选项。对于此示例,请使用以下选项。
每个训练集最多跑1000集,每集最多持续500步时间。
在“插曲管理器”对话框中显示培训进度(设置情节
选项),并禁用命令行显示(设置verb
选择假
).
当代理人在10个连续的事件中获得超过480的平均累积奖励时,停止训练。在这一点上,代理可以平衡摆在直立的位置。
有关更多信息,请参见rltringOptions.
.
trainOpts = rlTrainingOptions (...'maxepisodes', 1000,...'maxstepperepisode', 500,...“详细”,错误的,...“阴谋”,“训练进步”,...“StopTrainingCriteria”,“AverageReward”,...'stoptriningvalue', 480,...“ScoreAveragingWindowLength”,10);
在训练或模拟过程中,您可以使用情节
函数。
情节(env)
使用该代理商培训火车
函数。培训此代理是一个计算密集型进程,需要几分钟才能完成。要在运行此示例的同时节省时间,请通过设置加载预制代理doTraining
来假
.训练代理人,套装doTraining
来真的
.
dotraining = false;如果doTraining培训代理商。Trainstats =火车(代理,env,训练);其他的%加载示例的预训练代理。负载('matlabcartpoleac.mat',“代理”);结束
为了验证训练过的代理的性能,在车杆环境中模拟它。有关代理模拟的更多信息,请参见RlsimulationOptions.
和sim卡
.
simoptions = rlsimulation选项('maxsteps', 500);经验= sim (env,代理,simOptions);
totalReward =总和(experience.Reward)
TotalReward = 500.