主要内容

训练DDPG Agent控制双积分系统

这个例子展示了如何训练深度确定性策略梯度(DDPG)代理来控制MATLAB®建模的二阶动态系统。

有关DDPG代理的更多信息,请参见深度确定性策略梯度代理.有关显示如何在Simulink®中训练DDPG代理的示例,请参见金宝app训练DDPG代理人摆动和平衡摆

双积分器MATLAB环境

本例的强化学习环境是一个带增益的二阶双积分系统。训练目标是通过施加一个力输入来控制一个质量在二阶系统中的位置。

对于这种环境:

  • 质量从-4到4个单位之间的初始位置开始。

  • 从agent到环境的力动作信号为-2 ~ 2n。

  • 从环境中观测到的是物体的位置和速度。

  • 如果物体从原始位置移动超过5米,或者如果 | x | < 0 01

  • 奖励 r t ,则为的离散化 r t

r t - x t x t + u t R u t

在这里:

  • x 是质量的状态向量。

  • u 是作用在物体上的力。

  • 是对控制性能的权重; 10 0 0 1

  • R 是把重心放在控制努力上; R 0 01

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

创建环境界面

为双积分器系统创建预定义的环境接口。

环境= rlPredefinedEnv(“DoubleIntegrator-Continuous”
env = DoubleIntegratorContinuousAction with properties:增益:1 Ts: 0.1000 MaxDistance: 5 GoalThreshold: 0.0100 Q: [2x2 double] R: 0.0100 MaxForce: Inf State: [2x1 double]
env。MaxForce = Inf;

该接口有一个连续的动作空间,代理可以在其中从-应用力值对大众来说。

从环境接口获取观测和动作信息。

obsInfo = getObservationInfo(env);numObservations = obsInfo.Dimension(1);actInfo = getActionInfo(env);numActions = nummel (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);临界网络= connectLayers(临界网络,“状态”“concat /三机一体”);临界网络= connectLayers(临界网络,“行动”“concat / in2”);

查看关键网络配置。

图绘制(criticNetwork)

图中包含一个轴对象。axis对象包含一个graphplot类型的对象。

使用指定评论家表示的选项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);actor = rlContinuousDeterministicActor(actorNetwork,obsInfo,actInfo);

要创建DDPG代理,首先使用指定DDPG代理选项rlDDPGAgentOptions

agentOpts = rlDDPGAgentOptions(...“SampleTime”env。Ts,...“ActorOptimizerOptions”actorOpts,...“CriticOptimizerOptions”criticOpts,...“ExperienceBufferLength”1 e6,...“MiniBatchSize”、32);agentoptions . noiseoptions . variance = 0.3;agentoptions . noiseoptions . variancedecayrate = 1e-6;

使用指定的参与者表示、评论家表示和代理选项创建DDPG代理。有关更多信息,请参见rlDDPGAgent

agent = rlDDPGAgent(actor,批评家,agentOpts);

火车代理

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

  • 在训练课程中最多运行1000集,每集最多持续200个时间步。

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

  • 当代理收到的移动平均累积奖励大于-66时停止训练。在这一点上,智能体可以用最小的控制努力控制质量的位置。

有关更多信息,请参见rlTrainingOptions

trainOpts = rlTrainingOptions(...“MaxEpisodes”, 5000,...“MaxStepsPerEpisode”, 200,...“详细”假的,...“StopTrainingCriteria”“AverageReward”...“StopTrainingValue”, -66);

方法可以可视化双积分器环境情节在训练或模拟中发挥作用。

情节(env)

图Double Integrator Visualizer包含一个坐标轴对象。axis对象包含一个矩形类型的对象。

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

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

模拟DDPG Agent

为了验证训练代理的性能,在双积分器环境中进行仿真。有关代理模拟的详细信息,请参见rlSimulationOptions而且sim卡

simOptions = rlSimulationOptions(“MaxSteps”, 500);experience = sim(env,agent,simOptions);

图Double Integrator Visualizer包含一个坐标轴对象。axis对象包含一个矩形类型的对象。

totalReward =总和(经验。奖励)
totalReward = -65.9933

另请参阅

相关的话题