火车DQN代理和平衡摆摆动
这个例子展示了如何训练深q学习网络(DQN)代理和平衡一个钟摆建模仿真软件®。金宝app
DQN代理的更多信息,请参阅深Q-Network代理。例如,列车在MATLAB®DQN代理,看看火车DQN代理Cart-Pole平衡系统。
摆摆起模型
强化学习环境对于这个示例是一个简单的无摩擦摆,最初挂在一个向下的位置。培训的目标是使钟摆直立而不摔倒使用最少的控制工作。
打开模型。
mdl =“rlSimplePendulumModel”;open_system (mdl)
对于这个模型:
向上的平衡摆位置0弧度,向下悬挂位置
π
弧度。转矩操作信号从代理环境从2到2 N·m。
的观测环境是摆角的正弦、余弦的摆角,和摆角的导数。
奖励 ,在每一个步伐,提供
在这里:
的位移角直立位置。
的导数是位移角。
从前面的时间步长控制的努力。
关于这个模型的更多信息,请参阅负载预定义的仿真软件环境金宝app。
创建环境接口
创建一个预定义的钟摆环境界面。
env = rlPredefinedEnv (“SimplePendulumModel-Discrete”)
env = 金宝appSimulinkEnvWithAgent属性:模型:rlSimplePendulumModel AgentBlock: rlSimplePendulumModel / RL代理ResetFcn: [] UseFastRestart:
的接口有一个离散的行动空间三种可能的转矩值的代理可以应用一个钟摆:2 0,或者2 N·m。
定义初始条件的摆挂向下,指定一个环境重置函数使用一个匿名函数处理。这个重置函数设置工作空间变量的模型theta0
来π
。
env。ResetFcn = @(在)setVariable (,“theta0”π,“工作区”、mdl);
从环境中得到观察和行动规范信息
obsInfo = getObservationInfo (env)
obsInfo = rlNumericSpec属性:LowerLimit:无穷UpperLimit:正的名字:“观察”描述:[0 x0字符串]维度:1[3]数据类型:“替身”
actInfo = getActionInfo (env)
actInfo = rlFiniteSetSpec属性:元素:[3 x1双)名称:“扭矩”描述:[0 x0字符串]维度:[1]数据类型:“替身”
指定仿真时间特遣部队
和代理样品时间Ts
在几秒钟内。
t = 0.05;Tf = 20;
解决随机发生器再现性的种子。
rng (0)
创建DQN代理
DQN代理接近长期奖励,观察和操作,使用价值函数评论家。
DQN以来一个离散的行动空间,它可以依靠一个多输出评论家接近者,通常比依赖更有效的选择对于类似的估计值。一个多输出接近者只有观察作为输入和一个输出向量有尽可能多的元素数量的离散动作。每个输出元素代表预期的长期累积奖励根据输入的观察后,当对应的离散采取行动。
创建评论家,首先创建一个深层神经网络输入向量的三个要素(为正弦、余弦和摆角的导数)和一个输出向量和三个元素(2 0 2纳米操作)。更多信息创建一个深层神经网络价值函数表示,看到的创建政策和价值函数表示。
= [featureInputLayer(3款“归一化”,“没有”,“名字”,“状态”)fullyConnectedLayer(24日“名字”,“CriticStateFC1”)reluLayer (“名字”,“CriticRelu1”)fullyConnectedLayer(48岁“名字”,“CriticStateFC2”)reluLayer (“名字”,“CriticCommonRelu”)fullyConnectedLayer (3“名字”,“输出”));
查看评论家网络配置。
图绘制(layerGraph(款)
使用指定选项评论家表示rlRepresentationOptions
。
criticOpts = rlRepresentationOptions (“LearnRate”,0.001,“GradientThreshold”1);
创建一个使用指定的评论家表示深层神经网络和选项。您还必须指定观察和行动信息的评论家。有关更多信息,请参见rlQValueRepresentation
。
评论家= rlQValueRepresentation(款、obsInfo actInfo,“观察”,{“状态”},criticOpts);
创建DQN代理,首先使用指定DQN代理选项rlDQNAgentOptions
。
agentOptions = rlDQNAgentOptions (…“SampleTime”Ts,…“TargetSmoothFactor”1 e - 3,…“ExperienceBufferLength”,3000,…“UseDoubleDQN”假的,…“DiscountFactor”,0.9,…“MiniBatchSize”,64);
然后,创建DQN代理和代理选项使用指定的评论家表示。有关更多信息,请参见rlDQNAgent
。
代理= rlDQNAgent(评论家,agentOptions);
火车代理
培训代理商,首先指定培训选项。对于这个示例,使用以下选项。
运行每个培训最多1000集,每集持久的最多
500年
时间的步骤。在事件管理器对话框显示培训进展(设置
情节
在命令行选项)和禁用显示(设置详细的
选项假
)。停止训练当代理接收到平均累积奖励大于-1100连续在5集。在这一点上,代理可以快速平衡钟摆在直立位置使用最少的控制工作。
保存一份代理每集累积奖励大于-1100。
有关更多信息,请参见rlTrainingOptions
。
trainingOptions = rlTrainingOptions (…“MaxEpisodes”,1000,…“MaxStepsPerEpisode”,500,…“ScoreAveragingWindowLength”5,…“详细”假的,…“阴谋”,“训练进步”,…“StopTrainingCriteria”,“AverageReward”,…“StopTrainingValue”,-1100,…“SaveAgentCriteria”,“EpisodeReward”,…“SaveAgentValue”,-1100);
火车代理使用火车
函数。培训这个代理是一个计算密集型的过程需要几分钟才能完成。节省时间在运行这个例子中,加载一个pretrained代理设置doTraining
来假
。训练自己代理,集doTraining
来真正的
。
doTraining = false;如果doTraining%培训代理。trainingStats =火车(代理,env, trainingOptions);其他的%加载pretrained代理的例子。负载(“金宝appSimulinkPendulumDQNMulti.mat”,“代理”);结束
模拟DQN代理
验证培训代理的性能,模拟在钟摆的环境。代理模拟更多的信息,请参阅rlSimulationOptions
和sim卡
。
simOptions = rlSimulationOptions (“MaxSteps”,500);经验= sim (env,代理,simOptions);