主要内容

培训交流代理平衡车杆系统

这个例子展示了如何训练一个actor-critic (AC) agent来平衡在MATLAB®中建模的cart-pole系统。

有关AC代理的详细信息,请参见演员评论(AC)代理。有关演示如何使用并行计算训练AC代理的示例,请参见用并行计算训练交流代理平衡车杆系统

Cart-Pole MATLAB环境

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

对于这种环境:

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

  • 钟摆以-0.05和0.05 rad之间的初始角度开始直立。

  • 从代理到环境的力作用信号是-10或10 N。

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

  • 如果杆与垂直的距离超过12度,或者如果小车从原来的位置移动超过2.4米,则比赛结束。

  • 杆保持直立的每一步奖励+1。当钟摆落下时,罚-5分。

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

创建环境界面

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

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

界面有一个离散的动作空间,代理可以在其中应用两种可能的力值之一,-10或10 N。

从环境接口获取观察和动作信息。

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

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

rng (0)

创建AC Agent

AC代理使用价值函数批评近似贴现累积长期奖励。价值函数评论家必须接受观察作为输入,并返回单个标量(估计的贴现累积长期奖励)作为输出。

为了近似评论家内部的价值函数,可以使用神经网络。将网络定义为层对象的数组,并从环境规范对象中获得观察空间的维度和可能的动作数量。有关创建深度神经网络值函数表示的更多信息,请参见创建策略和价值功能

criticNet = [featureInputLayer(obsInfo.Dimension(1)) fulllyconnectedlayer (32) reluLayer fulllyconnectedlayer (1)];

转换为dlnetwork并显示权重的数量。

criticNet = dlnetwork(criticNet);总结(criticNet)
初始化:true可学习的数量:193输入:1 '输入' 4个特征

创建批评家近似器对象criticNet,以及观察规范。有关更多信息,请参见rlValueFunction

批评家= rlValueFunction(批评家网,obsInfo);

用随机观察输入检查批评家。

getValue(评论家,{兰德(obsInfo.Dimension)})
ans =-0.3590

AC代理使用随机策略来决定采取哪种行动,对于离散的行动空间,随机策略由离散的分类参与者近似。这个参与者必须将观察信号作为输入,并返回每个动作的概率。

为了在actor中近似策略函数,使用深度神经网络。将网络定义为层对象的数组,并从环境规范对象中获得观察空间的维度和可能的动作数量。

actorNet = [featureInputLayer(obsInfo.Dimension(1)) fulllyconnectedlayer (32)) reluLayer fulllyconnectedlayer (numel(actInfo.Elements)) softmaxLayer];

转换为dlnetwork并显示权重的数量。

actorNet = dlnetwork(actorNet);总结(actorNet)
初始化:true可学习的数量:226输入:1 '输入' 4个特征

创建角色近似器对象actorNet以及观察和行动规范。有关更多信息,请参见rlDiscreteCategoricalActor

actor = rlDiscreteCategoricalActor(actorNet,obsInfo,actInfo);

要返回作为随机观察值的函数的可能动作的概率分布,并给定当前网络权重,使用evaluate。

prb = evaluate(actor,{rand(obsInfo.Dimension)})
复审委员会=1x1单元阵列{2 x1单}
复审委员会{1}
ans =2x1单列向量0.4414 - 0.5586

使用演员和评论家创建代理。有关更多信息,请参见rlACAgent

agent = rlACAgent(演员,评论家);

用随机观察输入检查代理。

getAction(代理,{兰德(obsInfo.Dimension)})
ans =1x1单元阵列{[-10]}

使用点符号指定代理选项,包括演员和评论家的培训选项。或者,您可以使用rlACAgentOptionsrlOptimizerOptions对象,然后创建代理。

agent. agentoptions . entropylosweight = 0.01;agent.AgentOptions.ActorOptimizerOptions.LearnRate = 1e-2;agent.AgentOptions.ActorOptimizerOptions.GradientThreshold = 1;agent.AgentOptions.CriticOptimizerOptions.LearnRate = 1e-2;agent.AgentOptions.CriticOptimizerOptions.GradientThreshold = 1;

火车代理

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

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

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

  • 当智能体在连续10集中获得的平均累计奖励大于480时,停止训练。在这一点上,代理可以平衡摆在直立的位置。

有关更多信息,请参见rlTrainingOptions

trainopt = rlTrainingOptions(MaxEpisodes = 1000,MaxStepsPerEpisode = 500,Verbose = false,情节=“训练进步”StopTrainingCriteria =“AverageReward”StopTrainingValue = 480,ScoreAveragingWindowLength = 10);

您可以在训练或模拟过程中可视化推车杆系统情节函数。

情节(env)

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

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

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

模拟AC代理

为了验证经过训练的智能体的性能,可以在cart-pole环境中进行模拟。有关代理模拟的更多信息,请参见rlSimulationOptionssim卡

simOptions = rlSimulationOptions(MaxSteps=500);experience = sim(env,agent,simOptions);

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

totalReward = sum(experience.Reward)
totalReward = 500

另请参阅

应用程序

功能

对象

相关的例子

更多关于