主要内容

火车DQN代理Cart-Pole平衡系统

这个例子展示了如何训练深q学习网络(DQN)代理来平衡cart-pole MATLAB®系统建模。

DQN代理的更多信息,请参阅深Q-Network (DQN)代理。在仿真软件为例,火车DQN代理®,明白了金宝app火车DQN代理和平衡摆摆动

Cart-Pole MATLAB环境

强化学习环境对于这个示例是一个极连接到一个unactuated联合手推车,沿着一个无摩擦的轨道。培训的目标是使杆直立,没有跌倒。

对于这个环境:

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

  • 北极开始直立,最初夹角-0.05和0.05弧度。

  • 力行动信号从代理环境-10年或10 N。

  • 来自环境的观察车的位置和速度,极角和极角的导数。

  • 这一事件终止如果北极是超过12度从垂直或如果购物车移动超过2.4从原始位置。

  • + 1的奖励提供了每一个时间步,北极保持正直。一个点球5杆落时应用。

关于这个模型的更多信息,请参阅负载预定义的控制系统环境

创建环境接口

创建一个预定义的环境界面系统。

env = rlPredefinedEnv (“CartPole-Discrete”)
env = CartPoleDiscreteAction属性:重力:9.8000 MassCart: 1 MassPole: 0.1000长度:0.5000 MaxForce: 10 Ts: 0.0200 ThetaThresholdRadians: 0.2094 XThreshold: 2.4000 RewardForNotFalling: 1 PenaltyForFalling: 5状态:[4 x1双)

接口有一个离散的行动空间,两种可能的力值的代理可以应用一个购物车,-10年或10 N。

观察和行动规范信息。

obsInfo = getObservationInfo (env)
obsInfo = rlNumericSpec属性:LowerLimit:无穷UpperLimit:正的名字:“CartPole国家”描述:“x, dx,θ,dtheta”维度:[4 1]数据类型:“替身”
actInfo = getActionInfo (env)
actInfo = rlFiniteSetSpec属性:元素:-10[10]的名字:“CartPole行动”描述:[0 x0字符串]维度:[1]数据类型:“替身”

解决随机发生器再现性的种子。

rng (0)

创建DQN代理

DQN代理可以使用向量核反应能量函数批评者,这通常是更有效的比对于批评。作为输入向量核反应能量函数评论家观测和政府行动值作为输出。每个输出元素代表预期的长期累积奖励从国家采取相应的离散行动观察输入所示。创造价值函数的更多信息,请参阅创建政策和价值功能

评论家中的近似核反应能量函数,利用神经网络与一个输入通道(四维观测状态向量)和一个输出通道两个元素(一个用于10 N行动,另一个用于-10 N的行动)。层对象的网络定义为一个数组,并获得观测空间的维数和可能的行动环境规范的对象。

网= [featureInputLayer (obsInfo.Dimension (1) fullyConnectedLayer (20) reluLayer fullyConnectedLayer(长度(actInfo.Elements))];

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

网= dlnetwork(净);总结(净)
初始化:可学的真正的数字:142输入:1“输入”4特性

查看网络配置。

情节(净)

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

创建评论家接近者使用和环境规范。有关更多信息,请参见rlVectorQValueFunction

评论家= rlVectorQValueFunction(网,obsInfo, actInfo);

检查评论家与随机观测输入。

getValue(评论家,{兰德(obsInfo.Dimension)})
ans =2 x1单一列向量-0.2257 - 0.4299

创建DQN代理使用评论家。有关更多信息,请参见rlDQNAgent

代理= rlDQNAgent(批评);

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

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

指定DQN代理选项,包括培训选项评论家。或者,您可以使用rlDQNAgentOptionsrlOptimizerOptions对象。

agent.AgentOptions。UseDoubleDQN = false;agent.AgentOptions。TargetSmoothFactor = 1;agent.AgentOptions。TargetUpdateFrequency = 4;agent.AgentOptions。ExperienceBufferLength = 1 e5;agent.AgentOptions。MiniBatchSize = 256; agent.AgentOptions.CriticOptimizerOptions.LearnRate = 1e-3; agent.AgentOptions.CriticOptimizerOptions.GradientThreshold = 1;

火车代理

培训代理商,首先指定培训选项。对于这个示例,使用以下选项:

  • 运行一个训练最多包含1000集,每集持续最多500的时间步骤。

  • 在事件管理器对话框显示培训进展(设置情节在命令行选项)和禁用显示(设置详细的选项)。

  • 停止训练当代理接收到一个移动平均累积奖励大于480。在这一点上,代理可以平衡cart-pole系统在直立位置。

有关更多信息,请参见rlTrainingOptions

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

你可以想象cart-pole系统可以通过使用可视化情节函数在训练或模拟。

情节(env)

{“字符串”:“图车杆可视化工具包含一个坐标轴对象。坐标轴对象包含6行类型的对象,多边形。“,”泰克斯”:[],“乳胶”:[]}

火车代理使用火车函数。培训这个代理是一个计算密集型的过程需要几分钟才能完成。节省时间在运行这个例子中,加载一个pretrained代理设置doTraining。训练自己代理,集doTraining真正的

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

模拟DQN代理

验证培训代理的性能,模拟在cart-pole环境。代理模拟更多的信息,请参阅rlSimulationOptionssim卡。代理可以平衡cart-pole即使仿真时间增加到500步。

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

{“字符串”:“图车杆可视化工具包含一个坐标轴对象。坐标轴对象包含6行类型的对象,多边形。“,”泰克斯”:[],“乳胶”:[]}

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

另请参阅

相关的话题