火车DDPG剂来控制双积分器系统
这个例子展示了如何训练深决定性策略梯度(DDPG)代理控制MATLAB®的二阶动态系统建模。
DDPG代理的更多信息,请参阅深决定性策略梯度代理。为一个例子,演示如何在模型训练DDPG代理®,明白了金宝app火车DDPG代理和平衡摆摆动。
双积分器MATLAB环境
这个例子的强化学习环境是一个二阶双积分系统增益。培训的目标是控制质量的位置输入二阶系统施加一个力。
对于这个环境:
质量始于4和4单位之间的初始位置。
力行动信号从代理环境从2到2 N。
来自环境的观测质量的位置和速度。
这一事件终止如果质量超过5 m或者从原始位置 。
奖励 ,只要在每一个时间步,是一个离散化 :
在这里:
状态向量的质量。
力应用于质量。
控制性能上的权重; 。
重量的控制工作; 。
关于这个模型的更多信息,请参阅负载预定义的控制系统环境。
创建环境接口
创建一个预定义的环境为双积分器系统接口。
env = rlPredefinedEnv (“DoubleIntegrator-Continuous”)
env = DoubleIntegratorContinuousAction属性:增加:1 Ts: 0.1000 MaxDistance: 5 GoalThreshold: 0.0100问:[2 x2双]R: 0.0100 MaxForce:正状态:[2 x1双)
env。MaxForce =正;
接口有一个持续的行动空间,代理可以从——应用力值正
来正
的质量。
从环境中获得的观察和操作信息界面。
obsInfo = getObservationInfo (env);numObservations = obsInfo.Dimension (1);actInfo = getActionInfo (env);numActions =元素个数(actInfo);
解决随机发生器再现性的种子。
rng (0)
创建DDPG代理
DDPG代理接近长期奖励,观察和操作,使用批评价值函数表示。创建评论家,首先创建一个深层神经网络和两个输入(国家和行动)和一个输出。有关创建一个神经网络的更多信息价值函数表示,看到的创建政策和价值功能。
statePath = featureInputLayer (numObservations,“归一化”,“没有”,“名字”,“状态”);actionPath = featureInputLayer (numActions,“归一化”,“没有”,“名字”,“行动”);commonPath = [concatenationLayer (1、2、“名字”,“concat”)quadraticLayer (“名字”,“二次”)fullyConnectedLayer (1,“名字”,“StateValue”,“BiasLearnRateFactor”0,“偏见”,0)];criticNetwork = layerGraph (statePath);criticNetwork = addLayers (criticNetwork actionPath);criticNetwork = addLayers (criticNetwork commonPath);criticNetwork = connectLayers (criticNetwork,“状态”,“concat /三机一体”);criticNetwork = connectLayers (criticNetwork,“行动”,“concat / in2”);
查看评论家网络配置。
图绘制(criticNetwork)
使用指定选项评论家表示rlOptimizerOptions
。
criticOpts = rlOptimizerOptions (“LearnRate”,5 e - 3,“GradientThreshold”1);
创建一个使用指定的评论家表示神经网络和选项。您还必须指定动作和评论家的观测信息,你从环境中获取接口。有关更多信息,请参见rlQValueFunction
。
评论家= rlQValueFunction (criticNetwork obsInfo actInfo,“ObservationInputNames”,“状态”,“ActionInputNames”,“行动”);
DDPG代理决定哪些操作,观察,使用一个演员表示。创建演员,首先创建一个深层神经网络与一个输入(观察)和一个输出(行动)。
构建演员评论家以类似的方式。
actorNetwork = [featureInputLayer numObservations,“归一化”,“没有”,“名字”,“状态”)fullyConnectedLayer (numActions“名字”,“行动”,“BiasLearnRateFactor”0,“偏见”,0)];actorNetwork = dlnetwork (actorNetwork);actorOpts = rlOptimizerOptions (“LearnRate”1 e-04“GradientThreshold”1);演员= rlContinuousDeterministicActor (actorNetwork obsInfo actInfo);
创建DDPG代理,首先使用指定DDPG代理选项rlDDPGAgentOptions
。
agentOpts = rlDDPGAgentOptions (…“SampleTime”env.Ts,…“ActorOptimizerOptions”actorOpts,…“CriticOptimizerOptions”criticOpts,…“ExperienceBufferLength”1 e6,…“MiniBatchSize”、32);agentOpts.NoiseOptions。方差= 0.3;agentOpts.NoiseOptions。VarianceDecayRate = 1 e-6;
使用指定的演员表示,创建DDPG代理评论家表示,和代理的选择。有关更多信息,请参见rlDDPGAgent
。
代理= rlDDPGAgent(演员、评论家、agentOpts);
火车代理
培训代理商,首先指定培训选项。对于这个示例,使用以下选项。
训练运行最多1000集,每集持久最多200时间步。
在事件管理器对话框显示培训进展(设置
情节
在命令行选项)和禁用显示(设置详细的
选项)。停止训练当代理接收到移动平均累积奖励大于-66。在这一点上,代理可以控制质量的位置使用最少的控制工作。
有关更多信息,请参见rlTrainingOptions
。
trainOpts = rlTrainingOptions (…“MaxEpisodes”,5000,…“MaxStepsPerEpisode”,200,…“详细”假的,…“StopTrainingCriteria”,“AverageReward”,…“StopTrainingValue”,-66);
你可以想象双积分器环境使用情节
函数在训练或模拟。
情节(env)
火车代理使用火车
函数。培训这个代理是一个计算密集型过程,需要几个小时才能完成。节省时间在运行这个例子中,加载一个pretrained代理设置doTraining
来假
。训练自己代理,集doTraining
来真正的
。
doTraining = false;如果doTraining%培训代理。trainingStats =火车(代理,env, trainOpts);其他的%加载pretrained代理的例子。负载(“DoubleIntegDDPG.mat”,“代理”);结束
模拟DDPG代理
验证培训代理的性能,模拟在双积分器的环境。代理模拟更多的信息,请参阅rlSimulationOptions
和sim卡
。
simOptions = rlSimulationOptions (“MaxSteps”,500);经验= sim (env,代理,simOptions);
totalReward =总和(experience.Reward)
totalReward = -65.9933