主要内容

火车DDPG剂来控制双积分器系统

这个例子展示了如何训练深决定性策略梯度(DDPG)剂来控制一个二阶线性动态系统建模在MATLAB®。这个例子也比较DDPG代理控制器等。

DDPG代理的更多信息,请参阅深决定性策略梯度(DDPG)代理。为一个例子,演示如何在模型训练DDPG代理®,明白了金宝app火车DDPG代理和平衡摆摆动

双积分器MATLAB环境

这个例子的强化学习环境是一个二阶双积分系统增益。培训的目标是控制质量的位置输入二阶系统施加一个力。

对于这个环境:

  • 质量始于4和4单位之间的初始位置。

  • 来自环境的观测质量的位置和速度。

  • 这一事件终止如果质量超过5 m或者从原始位置 | 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

关于这个模型的更多信息,请参阅负载预定义的控制系统环境

对于这个示例环境是一个线性动力系统、环境状态是直接观察到的,和观察的奖励是一个二次函数和行动。因此找到行动的顺序问题,减少了长期累积奖励是一个离散时间线性二次最优控制问题,最佳的行动是一个线性系统状态的函数。也可以解决这个问题用线性二次调节器(等)设计,并在最后一部分的例子可以比较代理控制器等。

创建环境接口

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

env = rlPredefinedEnv (“DoubleIntegrator-Continuous”)
env = DoubleIntegratorContinuousAction属性:增加:1 Ts: 0.1000 MaxDistance: 5 GoalThreshold: 0.0100问:[2 x2双]R: 0.0100 MaxForce:正状态:[2 x1双)

接口有一个持续的行动空间,代理可以从——应用力值的质量。样品时间是存储在env.Ts,而矩阵存储在连续时间成本函数env.Qenv.R分别。

从环境中获得的观察和操作信息界面。

obsInfo = getObservationInfo (env)
obsInfo = rlNumericSpec属性:LowerLimit:无穷UpperLimit:正的名字:“状态”的描述:“x, dx”维度:[2 1]数据类型:“替身”
actInfo = getActionInfo (env)
actInfo = rlNumericSpec属性:LowerLimit:无穷UpperLimit:正的名字:“力”描述:[0 x0字符串]维度:[1]数据类型:“替身”

重置环境和初始状态。

x0 =重置(env)
x0 =2×14 0

解决随机发生器再现性的种子。

rng (0)

创建DDPG代理

DDPG代理接近折扣累积使用Q-value-function评论家长期回报。评论家核反应能量函数必须接受观察和行动作为输入并返回一个标量(估计折扣累积长期奖励)作为输出。近似评论家中的核反应能量函数,使用神经网络。最优政策的价值函数是二次,使用二次层(网络输出向量的二次单项式,中描述quadraticLayer)和一个完全连接层(提供了一个线性组合的输入)。

定义每个网络路径作为层对象和数组的维度观察和操作空间环境规范的对象。将名称分配给网络输入层,所以你可以将它们连接到输出路径和通道后显式地将它们与适当的环境。由于没有需要一个偏差,偏差项设置为0 (偏见= 0)和防止它改变(BiasLearnRateFactor = 0)。

创造价值函数近似者的更多信息,请参阅创建政策和价值功能

%的观察和操作路径obsPath = featureInputLayer (obsInfo.Dimension (1) Name =“obsIn”);actPath = featureInputLayer (actInfo.Dimension (1) Name =“肌动蛋白”);%的共同路径commonPath = = [concatenationLayer(1、2、名称“concat”)quadraticLayer fullyConnectedLayer (Name =“价值”,BiasLearnRateFactor = 0,偏见= 0)];%添加层layerGraph对象criticNet = layerGraph (obsPath);criticNet = addLayers (criticNet actPath);criticNet = addLayers (criticNet commonPath);%连接层criticNet = connectLayers (criticNet,“obsIn”,“concat /三机一体”);criticNet = connectLayers (criticNet,“肌动蛋白”,“concat / in2”);

查看评论家网络配置。

图绘制(criticNet)

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

转换为dlnetwork并显示权重的数量。

criticNet = dlnetwork (criticNet);总结(criticNet)
初始化:可学的真正的数量:7输入:1“obsIn”2特征2的肌动蛋白1的特性

创建评论家接近者对象使用criticNet、环境的观察和行动规范和网络输入层的名称与环境观测和行动通道,分别。有关更多信息,请参见rlQValueFunction

评论家= rlQValueFunction (criticNet,obsInfo actInfo,ObservationInputNames =“obsIn”ActionInputNames =“肌动蛋白”);

检查评论家与输入随机观察和行动。

getValue(评论家,{兰德(obsInfo.Dimension)},{兰德(actInfo.Dimension)})
ans =-0.3977

DDPG代理使用参数化连续确定的政策,这是由一个连续实现确定的演员。这演员必须接受一个观察作为输入,并返回一个行动作为输出。近似策略函数内的演员,用神经网络。因为这个例子最优政策是线性状态,使用浅网络与一个完全连接层提供两个网络的输入的线性组合。

层对象的网络定义为一个数组,并观察和行动空间的维数从环境规范的对象。因为没有需要一个偏见,作为评论家,完成设置偏差为零(偏见= 0)和防止它改变(BiasLearnRateFactor = 0)。关于演员的更多信息,请参阅创建政策和价值功能

actorNet = [featureInputLayer (obsInfo.Dimension (1) fullyConnectedLayer (actInfo.Dimension (1),BiasLearnRateFactor = 0,偏见= 0)];

转换为dlnetwork并显示权重的数量。

actorNet = dlnetwork (actorNet);总结(actorNet)
初始化:可学的真正的数量:3输入:1“输入”2的特性

创建一个演员使用actorNet和观察和操作规范。有关更多信息,请参见rlContinuousDeterministicActor

演员= rlContinuousDeterministicActor (actorNet obsInfo actInfo);

检查演员与一个随机观测输入。

getAction(演员,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[0.3493]}

创建DDPG代理使用演员和评论家。有关更多信息,请参见rlDDPGAgent

代理= rlDDPGAgent(演员、批评);

为代理指定选项,评论家,包括培训选项使用点符号。或者,您可以使用rlDDPGAgentOptions,rlOptimizerOptions在创建代理对象。

agent.AgentOptions。SampleTime = env.Ts;agent.AgentOptions。ExperienceBufferLength = 1 e6;agent.AgentOptions。MiniBatchSize = 32;agent.AgentOptions.NoiseOptions。StandardDeviation = 0.3;agent.AgentOptions.NoiseOptions。StandardDeviationDecayRate = 1 e;agent.AgentOptions.ActorOptimizerOptions。LearnRate = 1的军医; agent.AgentOptions.ActorOptimizerOptions.GradientThreshold = 1; agent.AgentOptions.CriticOptimizerOptions.LearnRate = 5e-3; agent.AgentOptions.CriticOptimizerOptions.GradientThreshold = 1;

初始化代理参数

政策实现的演员 u = K 1 x 1 + K 2 x 2 = Kx ,反馈收益 K 1 K 2 是两个演员网络的权重。它可以表明,闭环系统是稳定的,如果这些收益是负的,因此,初始化它们负值可以加速收敛。

核反应能量函数具有以下结构:

( x , u ) = W 1 x 1 2 + W 2 x 1 x 2 + W 3 x 2 2 + W 4 x 1 u + W 5 x 2 u + W 6 u 2

在哪里 W 是完全连接层的权重。另外,以矩阵形式:

( x , u ) = ( x 1 x 2 u ] ( W 1 W 2 2 W 4 2 W 2 2 W 3 W 5 2 W 4 2 W 5 2 W 6 ] ( x 1 x 2 u ] = ( x T u ] W ( x u ]

一个固定的政策 u = Kx ,累积长期奖励(政策)的价值就变成:

V ( x ) = ( x , Kx ) =

x T ( K T ] W ( K ] x =

x T Px

因为回报总是消极的,适当的近似累积奖励 P W 必须负定。因此,加快收敛,初始化批评网络权重 W W 是负的。

%创建负特征值的对角矩阵W =单(诊断接头((1 1 1))+ 0.1)
W =3 x3单一矩阵-1.1000 -0.1000 -0.1000 -0.1000 -1.1000 -0.1000 -0.1000 -0.1000 -1.1000
%提取指标的上三角一个3 * 3矩阵的一部分idx = triu(真(3))
idx =3 x3逻辑阵列1 1 1 0 1 1 0 0 1
%更新参数的演员和评论家票面价值= getLearnableParameters(代理);par.Actor{1} =单([1]);par.Critic {1} = W (idx) ';setLearnableParameters(代理,票面价值);

检查代理使用一个随机观察输入。

getAction(代理,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[-1.2857]}

火车代理

培训代理商,首先指定培训选项。对于这个示例,使用以下选项。

  • 运行在最5000年在训练集,每集与持久的最多200年时间的步骤。

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

  • 停止训练当代理接收到移动平均累积奖励大于-66年。在这一点上,代理可以控制质量的位置使用最少的控制工作。

有关更多信息,请参见rlTrainingOptions

trainOpts = rlTrainingOptions (MaxEpisodes = 5000,MaxStepsPerEpisode = 200,Verbose = false,情节=“训练进步”,StopTrainingCriteria =“AverageReward”,StopTrainingValue = -66);

你可以想象双积分器环境使用情节函数在训练或模拟。

情节(env)

图双积分器可视化工具包含一个坐标轴对象。坐标轴对象包含一个类型的对象的矩形。

培养剂使用火车。培训这个代理是一个计算密集型过程,需要几个小时才能完成。节省时间在运行这个例子中,加载一个pretrained代理设置doTraining。训练自己代理,集doTraining真正的

doTraining = false;如果doTraining%培训代理。trainingStats =火车(代理,env, trainOpts);其他的%加载pretrained代理的例子。负载(“DoubleIntegDDPG.mat”,“代理”);结束

模拟DDPG代理

验证培训代理的性能,模拟在双积分器的环境。代理模拟更多的信息,请参阅rlSimulationOptionssim卡

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

图双积分器可视化工具包含一个坐标轴对象。坐标轴对象包含一个类型的对象的矩形。

totalReward =总和(experience.Reward)
totalReward = -65.9875

解决问题等

这个函数lqrd(控制系统工具箱)解决了离散等问题,提出了一个例子。这个函数计算最优离散时间增益矩阵Klqr和黎卡提微分方程的解决方案Plqr。当Klqr是植物通过负面状态反馈连接输入(力),指定的成本函数的离散时间等价env.Qenv.R是最小化。此外,累计成本从最初的时间到正无穷,从一个初始状态x0,等于* Plqr * x0 x0”

使用lqrd解决离散等问题。

[Klqr, Plqr] = lqrd ([0 1; 0 0], [0; env.Gain], env.Q, env.R, env.Ts);

在这里,[0 1;0 0][0;env.Gain]是连续时间过渡和输入增益矩阵,分别双积分器系统。

如果没有安装控制系统工具箱™,默认使用解决方案示例值。

Klqr = (17.8756 - 8.2283);Plqr = [4.1031 - 0.3376;0.3376 - 0.1351);

如果演员政策 u = Kx 成功地接近最优政策,然后由此产生 K 必须关闭 - - - - - - K 等方面 (负号是由于这一事实 K 等方面 计算假定一个负面反馈连接)。

如果评论家学习的一个很好的近似最优值函数,然后由此产生 P 正如之前所定义的,必须接近 - - - - - - P 等方面 (负号是由于奖励被定义为负的成本)。

比较DDPG剂最优控制器

提取的参数(重量)的演员和评论家在代理。

票面价值= getLearnableParameters(代理);

显示演员权重。

K = par.Actor {1}
K =1 x2单一的行向量-15.4601 - -7.2076

注意,涨幅接近最优的解决方案-Klqr:

-Klqr
ans =1×2-17.8756 - -8.2283

重建矩阵 W P 分别定义核反应能量和价值功能。首先,初始化 W 为零。

W = 0 (3);

把批评上三角的部分重量 W c

W (idx) = par.Critic {1};

重新创建 W c 之前定义。

W = (W + W ') / 2
W =3×3-4.9869 -0.7788 -0.0548 -0.7788 -0.3351 -0.0222 -0.0548 -0.0222 0.0008

使用 W K ,计算 P 之前定义。

P =[眼(2)K '] * W *(眼(2);K)
P =2 x2单一矩阵-3.1113 0.0436 0.0436 0.0241

注意,涨幅接近黎卡提微分方程的解决方案-Plqr

-Plqr
ans =2×2-4.1031 -0.3376 -0.3376 -0.1351

环境的初始状态。

x0 =重置(env);

图双积分器可视化工具包含一个坐标轴对象。坐标轴对象包含一个类型的对象的矩形。

未来的价值函数估计累积长期奖励当使用政策制定的演员。计算函数在初始状态的值,根据评论家的重量。这是相同的值显示在窗口的培训集Q0

q0 = x0 ' * P * x0
q0 =-49.7803

注意,值是接近验证仿真的实际获得的奖励,totalReward,这表明评论家学习一个好的近似的价值函数的政策制定的参与者。

计算初始状态的价值,真正的最优政策等方面制定的控制器。

* Plqr * x0 x0”
ans = -65.6494

这个值也非常接近中获得的值验证仿真,证实该政策制定的学习和真正的演员是一个很好的近似最优政策。

另请参阅

应用程序

功能

对象

相关的例子

更多关于