主要内容

火车AC代理以平衡车杆系统

这个例子展示了如何训练一个演员-评论家(AC)代理来平衡一个在MATLAB®中建模的车杆系统。

有关交流代理商的更多信息,请参阅Actor-Critic代理.有关如何使用并行计算训练AC代理的示例,请参阅用并行计算训练交流Agent平衡车杆系统

Cart-Pole MATLAB环境

本例的强化学习环境是一个连接在小车上的非驱动关节上的杆,它沿着无摩擦的轨道移动。训练目标是使钟摆直立而不摔倒。

对于这个环境:

  • 向上平衡的摆锤位置是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 = RlR​​epresentationOptions(“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)

图车杆视觉器包含轴。轴包含6个类型的线,多边形。

使用该代理商培训火车函数。培训此代理是一个计算密集型进程,需要几分钟才能完成。要在运行此示例的同时节省时间,请通过设置加载预制代理doTraining.训练代理人,套装doTraining真的

dotraining = false;如果doTraining培训代理商。Trainstats =火车(代理,env,训练);其他的%加载示例的预训练代理。负载('matlabcartpoleac.mat'“代理”);结束

模拟AC代理

为了验证训练过的代理的性能,在车杆环境中模拟它。有关代理模拟的更多信息,请参见RlsimulationOptions.sim卡

simoptions = rlsimulation选项('maxsteps', 500);经验= sim (env,代理,simOptions);

图车杆视觉器包含轴。轴包含6个类型的线,多边形。

totalReward =总和(experience.Reward)
TotalReward = 500.

另请参阅

相关话题