这个例子展示了如何训练深q学习网络(DQN)代理来平衡cart-pole MATLAB®系统建模。
DQN代理的更多信息,请参阅深Q-Network代理。在仿真软件为例,火车DQN代理®,明白了金宝app火车DQN代理和平衡摆摆动。
强化学习环境对于这个示例是一个极连接到一个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(24日“名字”,“CriticStateFC1”)reluLayer (“名字”,“CriticRelu1”)fullyConnectedLayer(24日“名字”,“CriticStateFC2”)reluLayer (“名字”,“CriticCommonRelu”)fullyConnectedLayer(长度(actInfo.Elements),“名字”,“输出”));
查看网络配置。
图绘制(layerGraph(款)
使用指定一些培训选项的评论家表示rlRepresentationOptions
。
criticOpts = rlRepresentationOptions (“LearnRate”,0.001,“GradientThreshold”1);
创建一个使用指定的评论家表示神经网络和选项。有关更多信息,请参见rlQValueRepresentation
。
评论家= rlQValueRepresentation(款、obsInfo actInfo,“观察”,{“状态”},criticOpts);
创建DQN代理,首先使用指定DQN代理选项rlDQNAgentOptions
。
agentOpts = rlDQNAgentOptions (…“UseDoubleDQN”假的,…“TargetSmoothFactor”,1…“TargetUpdateFrequency”4…“ExperienceBufferLength”,100000,…“DiscountFactor”,0.99,…“MiniBatchSize”,256);
然后,创建DQN代理和代理选项使用指定的评论家表示。有关更多信息,请参见rlDQNAgent
。
代理= rlDQNAgent(评论家,agentOpts);
培训代理商,首先指定培训选项。对于这个示例,使用以下选项:
运行一个训练最多包含1000集,每集持续最多500的时间步骤。
在事件管理器对话框显示培训进展(设置情节
在命令行选项)和禁用显示(设置详细的
选项假
)。
停止训练当代理接收到一个移动平均累积奖励大于480。在这一点上,代理可以平衡cart-pole系统在直立位置。
有关更多信息,请参见rlTrainingOptions
。
trainOpts = rlTrainingOptions (…“MaxEpisodes”,1000,…“MaxStepsPerEpisode”,500,…“详细”假的,…“阴谋”,“训练进步”,…“StopTrainingCriteria”,“AverageReward”,…“StopTrainingValue”,480);
你可以想象cart-pole系统可以通过使用可视化情节
函数在训练或模拟。
情节(env)
火车代理使用火车
函数。培训这个代理是一个计算密集型的过程需要几分钟才能完成。节省时间在运行这个例子中,加载一个pretrained代理设置doTraining
来假
。训练自己代理,集doTraining
来真正的
。
doTraining = false;如果doTraining%培训代理。trainingStats =火车(代理,env, trainOpts);其他的%加载pretrained代理的例子。负载(“MATLABCartpoleDQNMulti.mat”,“代理”)结束
验证培训代理的性能,模拟在cart-pole环境。代理模拟更多的信息,请参阅rlSimulationOptions
和sim卡
。代理可以平衡cart-pole即使仿真时间增加到500步。
simOptions = rlSimulationOptions (“MaxSteps”,500);经验= sim (env,代理,simOptions);
totalReward =总和(experience.Reward)
totalReward = 500