培训DQN代理平衡车杆系统

这个例子展示了如何训练一个深度Q-learning network (DQN) agent来平衡MATLAB®中建模的车杆系统。

有关DQN代理的更多信息,请参见深Q-Network代理。有关在Simulink®中培训DQN代理的示例,请参见万博1manbetx训练DQN试剂上摆和平衡摆

Cart-pole MATLAB环境

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

对于这个环境:

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

  • 钟摆以+/- 0.05弧度的初始角度开始直立

  • 从agent到环境的力作用信号为-10到10n

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

  • 如果磁极与垂直方向的角度超过12度,或者小车与原始位置的移动距离超过2.4米,那么这一集就结束了

  • 每向前走一步,就会得到+1的奖励。当钟摆下落时,惩罚为-5。

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

创建环境接口

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

env = rlPredefinedEnv (“CartPole-Discrete”)
env = cartpole离散作用与属性:引力:9.8000 MassCart: 1 MassCart: 0.1000长度:0.5000 MaxForce: 10 Ts: 0.0200

该接口有一个离散的动作空间,在这个空间中,代理可以将两个可能的力值中的一个应用到cart, -10或10n。

修正随机生成器种子的可重复性。

rng (0)

创建DQN代理

DQN代理使用批评值函数表示来近似给出的观察和操作的长期回报。要创建批评家,首先要创建一个包含两个输入(状态和动作)和一个输出的深度神经网络。有关创建神经网络值函数表示的更多信息,请参见创建策略和值函数表示

statePath = [imageInputLayer([4 1 1]),“归一化”,“没有”,“名字”,“状态”)fullyConnectedLayer(24日“名字”,“CriticStateFC1”)reluLayer (“名字”,“CriticRelu1”)fullyConnectedLayer(24日“名字”,“CriticStateFC2”));actionPath = [imageInputLayer([1,1,1]),“归一化”,“没有”,“名字”,“行动”)fullyConnectedLayer(24日“名字”,“CriticActionFC1”));commonPath = [additionLayer(2,“名字”,“添加”)reluLayer (“名字”,“CriticCommonRelu”)fullyConnectedLayer (1,“名字”,“输出”));criticNetwork = layerGraph (statePath);关键网络= addLayers(关键网络,动作路径);关键网络= addLayers(关键网络,公共路径);criticNetwork = connectLayers (criticNetwork,“CriticStateFC2”,“添加/三机一体”);criticNetwork = connectLayers (criticNetwork,“CriticActionFC1”,“添加/ in2”);

查看评论家网络配置。

图绘制(criticNetwork)

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

criticOpts = rlRepresentationOptions (“LearnRate”,0.01,“GradientThreshold”1);

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

obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);评论家= rlQValueRepresentation (criticNetwork obsInfo actInfo,“观察”,{“状态”},“行动”,{“行动”},criticOpts);

要创建DQN代理,首先使用以下命令指定DQN代理选项rlDQNAgentOptions

agentOpts = rlDQNAgentOptions (“UseDoubleDQN”假的,“TargetUpdateMethod”,“周期”,“TargetUpdateFrequency”4“ExperienceBufferLength”,100000,“DiscountFactor”,0.99,“MiniBatchSize”,256);

然后,使用指定的批评家表示和代理选项创建DQN代理。有关更多信息,请参见rlDQNAgent

代理= rlDQNAgent(评论家,agentOpts);

火车代理

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

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

  • 在“剧集管理器”对话框中显示培训进度情节选项)和禁用命令行显示(设置详细的选项)。

  • 当代理收到移动平均累积奖励大于480时停止训练。此时,agent可以将车杆系统平衡在垂直位置。

有关更多信息,请参见rlTrainingOptions

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

用该方法可以直观地显示汽车杆系情节在训练或模拟过程中发挥作用。

情节(env)

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

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

模拟DQN代理

为了验证训练后的agent的性能,可以在cart-pole环境中对其进行仿真。有关代理模拟的更多信息,请参见rlSimulationOptionssim卡。当仿真时间增加到500时,智能体仍能保持平衡。

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

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

另请参阅

相关的话题