主要内容

训练空调代理人平衡车杆系统

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

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

Cart-Pole MATLAB环境

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

对于这个环境:

  • 向上平衡的摆位为0弧度,向下悬挂的位置是π弧度。

  • 钟摆开始直立,初始角度在-0.05和0.5 rad之间。

  • agent对环境的力作用信号为-10到10 N。

  • 从环境中观察到的是小车的位置和速度、摆角和摆角的导数。

  • 如果杆距垂直方向超过12度,或者车距初始位置移动超过2.4米,则该插曲终止。

  • 当杆保持直立时,奖励为+1。当钟摆下降时,惩罚为-5。

有关此模型的更多信息,请参见加载预定义的控制系统环境

创建环境接口

为摆创建一个预定义的环境接口。

env = rlPredefinedEnv (“CartPole-Discrete”
env = CartPoleDiscreteAction with properties: Gravity: 9.8000 MassCart: 1 maspole: 0.1000 Length: 0.5000 MaxForce: 10 Ts: 0.0200 thetathresholdraites: 0.2094 XThreshold: 2.4000 RewardForNotFalling: 1 PenaltyForFalling: -5 State: [4x1 double]
env。PenaltyForFalling = -10;

该界面有一个离散的动作空间,在该空间中,agent可以对小车施加两个可能的力值之一,-10或10n。

从环境界面获取观察和行动信息。

obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

修复随机生成器种子的再现性。

rng (0)

创建交流代理

AC代理使用批判值函数表示来近似给定的观察和行动的长期回报。要创建批评家,首先创建一个深度神经网络,它有一个输入(观察)和一个输出(状态值)。由于环境有4个观测值,所以批评家网络的输入大小为4。有关创建深度神经网络值函数表示的更多信息,请参见创建策略和价值功能表示

批评家= [featureInputLayer(4,“归一化”“没有”“名字”“状态”) fullyConnectedLayer (1,“名字”“CriticFC”));

为使用的批评家表示指定选项rlRepresentationOptions

criticOpts = rlRepresentationOptions (“LearnRate”, 8 e - 3,“GradientThreshold”1);

使用指定的深度神经网络和选项创建批评家表示。您还必须为评论家指定操作和观察信息,这些信息是从环境接口获得的。有关更多信息,请参见rlValueRepresentation

评论家= rlValueRepresentation (criticNetwork obsInfo,“观察”, {“状态”}, criticOpts);

在给定的观察结果下,AC代理使用一个参与者表示来决定采取哪个动作。要创建参与者,需要创建一个具有一个输入(观察)和一个输出(动作)的深度神经网络。actor网络的输出大小是2,因为环境有两个可能的动作,-10和10。

以与评论家相似的方式构造行动者。有关更多信息,请参见rlStochasticActorRepresentation

[featureInputLayer(4,“归一化”“没有”“名字”“状态”) fullyConnectedLayer (2“名字”“俱乐部”) softmaxLayer (“名字”“actionProb”));actorOpts = rlRepresentationOptions (“LearnRate”, 8 e - 3,“GradientThreshold”1);演员= rlStochasticActorRepresentation (actorNetwork obsInfo actInfo,...“观察”, {“状态”}, actorOpts);

要创建AC代理,首先使用rlACAgentOptions

agentOpts = rlACAgentOptions (...“NumStepsToLookAhead”32岁的...“DiscountFactor”, 0.99);

然后使用指定的参与者表示和默认代理选项创建代理。有关更多信息,请参见rlACAgent

代理= rlACAgent(演员、评论家、agentOpts);

火车代理

要培训代理,首先指定培训选项。对于本示例,请使用以下选项。

  • 每个训练集最多跑1000集,每集最多持续500步时间。

  • 在“插曲管理器”对话框中显示培训进度(设置情节选项),并禁用命令行显示(设置详细的选项).

  • 当代理人在10个连续的事件中获得超过480的平均累积奖励时,停止训练。在这一点上,代理可以平衡摆在直立的位置。

有关更多信息,请参见rlTrainingOptions

trainOpts = rlTrainingOptions (...“MaxEpisodes”, 1000,...“MaxStepsPerEpisode”, 500,...“详细”假的,...“阴谋”“训练进步”...“StopTrainingCriteria”“AverageReward”...“StopTrainingValue”, 480,...“ScoreAveragingWindowLength”10);

在训练或模拟过程中,您可以使用情节函数。

情节(env)

Figure Cart Pole Visualizer包含一个轴对象。轴对象包含6个类型为线、多边形的对象。

训练代理人使用火车函数。训练这个代理是一个计算密集型的过程,需要几分钟才能完成。为了节省运行此示例的时间,请通过设置加载预先训练过的代理doTraining.自己训练代理人,设置doTraining真正的

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

模拟交流代理

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

simOptions = rlSimulationOptions (“MaxSteps”, 500);经验= sim (env,代理,simOptions);

Figure Cart Pole Visualizer包含一个轴对象。轴对象包含6个类型为线、多边形的对象。

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

另请参阅

相关的话题