主要内容gydF4y2Ba

学习和限制申请PID控制器gydF4y2Ba

这个例子展示了如何从数据和应用这些学习约束约束为PID控制应用程序。首先,您使用深层神经网络学习约束函数,这就需要深度学习工具箱™软件。然后将约束应用于PID控制操作使用约束执行块。gydF4y2Ba

对于这个示例,下面描述的植物动力学方程[1]。gydF4y2Ba

xgydF4y2Ba ˙gydF4y2Ba 1gydF4y2Ba =gydF4y2Ba - - - - - -gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba +gydF4y2Ba (gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba 2gydF4y2Ba +gydF4y2Ba 1gydF4y2Ba )gydF4y2Ba ugydF4y2Ba 1gydF4y2Ba xgydF4y2Ba ˙gydF4y2Ba 2gydF4y2Ba =gydF4y2Ba - - - - - -gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba +gydF4y2Ba (gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba 2gydF4y2Ba +gydF4y2Ba 1gydF4y2Ba )gydF4y2Ba ugydF4y2Ba 2gydF4y2Ba

工厂的目标是跟踪下面的轨迹。gydF4y2Ba

θgydF4y2Ba ˙gydF4y2Ba =gydF4y2Ba 0gydF4y2Ba 。gydF4y2Ba 1gydF4y2Ba πgydF4y2Ba xgydF4y2Ba ˙gydF4y2Ba 1gydF4y2Ba dgydF4y2Ba =gydF4y2Ba - - - - - -gydF4y2Ba rgydF4y2Ba 因为gydF4y2Ba (gydF4y2Ba θgydF4y2Ba )gydF4y2Ba xgydF4y2Ba ˙gydF4y2Ba 2gydF4y2Ba dgydF4y2Ba =gydF4y2Ba rgydF4y2Ba 罪gydF4y2Ba (gydF4y2Ba θgydF4y2Ba )gydF4y2Ba

例如一个已知约束函数适用于相同的PID控制应用程序,看看gydF4y2Ba强制约束的PID控制器gydF4y2Ba。gydF4y2Ba

设置随机种子和配置模型参数和初始条件。gydF4y2Ba

rng (0);gydF4y2Ba%随机种子gydF4y2Bar = 1.5;gydF4y2Ba%半径为期望的轨迹gydF4y2Bat = 0.1;gydF4y2Ba%样品时间gydF4y2BaTf = 22;gydF4y2Ba%的持续时间gydF4y2Bax0_1 = - r;gydF4y2Ba% x1的初始条件gydF4y2Bax0_2 = 0;gydF4y2Ba%初始条件为x2gydF4y2BamaxSteps = Tf / Ts;gydF4y2Ba%仿真步骤gydF4y2Ba

设计PID控制器gydF4y2Ba

在学习和应用的限制,设计PID控制器跟踪参考轨迹。的gydF4y2BatrackingWithPIDsgydF4y2Ba模型包含两个PID控制器与收益调整使用gydF4y2BaPID调谐器gydF4y2Ba应用。在仿真软件优化PID控制器模型的更多信息,见金宝appgydF4y2Ba介绍了基于模型的PID优化模型金宝appgydF4y2Ba。gydF4y2Ba

mdl =gydF4y2Ba“trackingWithPIDs”gydF4y2Ba;open_system (mdl)gydF4y2Ba

模拟PID控制器和策划他们的跟踪性能。gydF4y2Ba

%模拟模型。gydF4y2Ba= sim (mdl);gydF4y2Ba%提取轨迹。gydF4y2BalogData = out.logsout;x1_traj = logData {3} .Values.Data;x2_traj = logData {4} .Values.Data;x1_des = logData {1} .Values.Data;x2_des = logData {2} .Values.Data;gydF4y2Ba%绘制轨迹。gydF4y2Ba图(gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“跟踪”gydF4y2Ba)xlim ((2, 2)) ylim((2, 2))情节(x1_des x2_des,gydF4y2Ba“r”gydF4y2Ba)包含(gydF4y2Bax1的gydF4y2Ba)ylabel (gydF4y2Ba“x2”gydF4y2Ba)举行gydF4y2Ba在gydF4y2Ba情节(x1_traj x2_traj,gydF4y2Ba”乙:“gydF4y2Ba,gydF4y2Ba“线宽”gydF4y2Ba,2)gydF4y2Ba在gydF4y2Ba情节(x1_traj (1) x2_traj (1),gydF4y2Ba“g *”gydF4y2Ba)举行gydF4y2Ba在gydF4y2Ba情节(x1_traj(结束),x2_traj(结束),gydF4y2Ba“去”gydF4y2Ba)传说(gydF4y2Ba“想要的”gydF4y2Ba,gydF4y2Ba“轨迹”gydF4y2Ba,gydF4y2Ba“开始”gydF4y2Ba,gydF4y2Ba“结束”gydF4y2Ba)gydF4y2Ba

图跟踪包含一个坐标轴对象。坐标轴对象包含4线类型的对象。这些对象表示期望的轨迹,开始,结束。gydF4y2Ba

约束函数gydF4y2Ba

在这个例子中,您将了解应用程序限制和修改PID控制器的控制行动来满足这些约束。gydF4y2Ba

工厂给出的可行域约束gydF4y2Ba {gydF4y2Ba xgydF4y2Ba :gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba ≤gydF4y2Ba 1gydF4y2Ba ,gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba ≤gydF4y2Ba 1gydF4y2Ba }gydF4y2Ba 。因此,轨迹gydF4y2Ba xgydF4y2Ba kgydF4y2Ba +gydF4y2Ba 1gydF4y2Ba =gydF4y2Ba (gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba (gydF4y2Ba kgydF4y2Ba +gydF4y2Ba 1gydF4y2Ba )gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba (gydF4y2Ba kgydF4y2Ba +gydF4y2Ba 1gydF4y2Ba )gydF4y2Ba ]gydF4y2Ba ′gydF4y2Ba 必须满足gydF4y2Ba xgydF4y2Ba kgydF4y2Ba +gydF4y2Ba 1gydF4y2Ba ≤gydF4y2Ba 1gydF4y2Ba 。gydF4y2Ba

您可以通过下列近似植物动力学方程。gydF4y2Ba

xgydF4y2Ba kgydF4y2Ba +gydF4y2Ba 1gydF4y2Ba ≈gydF4y2Ba 一个gydF4y2Ba xgydF4y2Ba kgydF4y2Ba +gydF4y2Ba (gydF4y2Ba ggydF4y2Ba 1gydF4y2Ba (gydF4y2Ba xgydF4y2Ba kgydF4y2Ba )gydF4y2Ba 0gydF4y2Ba 0gydF4y2Ba ggydF4y2Ba 2gydF4y2Ba (gydF4y2Ba xgydF4y2Ba kgydF4y2Ba )gydF4y2Ba ]gydF4y2Ba ugydF4y2Ba kgydF4y2Ba

应用约束方程产生以下约束函数。gydF4y2Ba

一个gydF4y2Ba xgydF4y2Ba kgydF4y2Ba +gydF4y2Ba (gydF4y2Ba ggydF4y2Ba 1gydF4y2Ba (gydF4y2Ba xgydF4y2Ba kgydF4y2Ba )gydF4y2Ba 0gydF4y2Ba 0gydF4y2Ba ggydF4y2Ba 2gydF4y2Ba (gydF4y2Ba xgydF4y2Ba kgydF4y2Ba )gydF4y2Ba ]gydF4y2Ba ugydF4y2Ba kgydF4y2Ba ≤gydF4y2Ba (gydF4y2Ba 1gydF4y2Ba 1gydF4y2Ba ]gydF4y2Ba

约束执行块接受约束的形式gydF4y2Ba fgydF4y2Ba xgydF4y2Ba +gydF4y2Ba ggydF4y2Ba xgydF4y2Ba ugydF4y2Ba ≤gydF4y2Ba cgydF4y2Ba 。对于这个应用程序,这个约束函数的系数如下。gydF4y2Ba

fgydF4y2Ba xgydF4y2Ba =gydF4y2Ba 一个gydF4y2Ba xgydF4y2Ba kgydF4y2Ba ,gydF4y2Ba ggydF4y2Ba xgydF4y2Ba =gydF4y2Ba (gydF4y2Ba ggydF4y2Ba 1gydF4y2Ba (gydF4y2Ba xgydF4y2Ba kgydF4y2Ba )gydF4y2Ba 0gydF4y2Ba 0gydF4y2Ba ggydF4y2Ba 2gydF4y2Ba (gydF4y2Ba xgydF4y2Ba kgydF4y2Ba )gydF4y2Ba ]gydF4y2Ba ,gydF4y2Ba cgydF4y2Ba =gydF4y2Ba (gydF4y2Ba 1gydF4y2Ba 1gydF4y2Ba ]gydF4y2Ba

学习约束函数gydF4y2Ba

对于这个示例,约束函数的系数是未知的。因此,您必须从训练数据得到它们。收集培训数据,使用gydF4y2BarlCollectDataPIDgydF4y2Ba模型。这个模型允许您通过零或随机输入植物模型和记录生成的输出。gydF4y2Ba

mdl =gydF4y2Ba“rlCollectDataPID”gydF4y2Ba;open_system (mdl)gydF4y2Ba

学习未知的矩阵gydF4y2Ba 一个gydF4y2Ba ,设置植物输入为零。当你这样做时,植物动力学gydF4y2Ba xgydF4y2Ba kgydF4y2Ba +gydF4y2Ba 1gydF4y2Ba ≈gydF4y2Ba 一个gydF4y2Ba xgydF4y2Ba kgydF4y2Ba 。gydF4y2Ba

mdl =gydF4y2Ba“rlCollectDataPID”gydF4y2Ba;open_system (mdl)gydF4y2Ba

收集使用训练数据gydF4y2BacollectDataPIDgydF4y2Bahelper函数。这个函数多次模拟模型,提取输入/输出数据。函数也格式训练数据到一个数组中有六个列:gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba (gydF4y2Ba kgydF4y2Ba )gydF4y2Ba ,gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba (gydF4y2Ba kgydF4y2Ba )gydF4y2Ba ,gydF4y2Ba ugydF4y2Ba 1gydF4y2Ba (gydF4y2Ba kgydF4y2Ba )gydF4y2Ba ,gydF4y2Ba ugydF4y2Ba 2gydF4y2Ba (gydF4y2Ba kgydF4y2Ba )gydF4y2Ba ,gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba (gydF4y2Ba kgydF4y2Ba +gydF4y2Ba 1gydF4y2Ba )gydF4y2Ba ,gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba (gydF4y2Ba kgydF4y2Ba +gydF4y2Ba 1gydF4y2Ba )gydF4y2Ba 。gydF4y2Ba

numSamples = 1000;data = collectDataPID (mdl numSamples);gydF4y2Ba

找到一个最小二乘解gydF4y2Ba 一个gydF4y2Ba 使用输入/输出数据。gydF4y2Ba

inputData =数据(:,1:2);outputData =数据(:,5:6);一个= inputData \ outputData;gydF4y2Ba

收集的训练数据。学习未知函数gydF4y2Ba ggydF4y2Ba xgydF4y2Ba 配置模型,使用随机输入值服从正态分布。gydF4y2Ba

%配置模型,使用随机输入数据。gydF4y2Ba黑色= [mdlgydF4y2Ba/手动开关的gydF4y2Ba];set_param(黑色,gydF4y2Ba“西南”gydF4y2Ba,gydF4y2Ba' 0 'gydF4y2Ba);gydF4y2Ba%收集数据。gydF4y2Badata = collectDataPID (mdl numSamples);gydF4y2Ba

训练一个深层神经网络近似gydF4y2Ba ggydF4y2Ba xgydF4y2Ba 函数使用gydF4y2BatrainConstraintPIDgydF4y2Bahelper函数。这个函数格式的数据训练然后创建和火车深神经网络。训练一个深层神经网络需要深度学习工具箱软件。gydF4y2Ba

深层神经网络的输入是植物状态。创建输入训练数据提取收集到的状态信息。gydF4y2Ba

inputData =数据(:,1:2);gydF4y2Ba

从深层神经网络对应的输出gydF4y2Ba ggydF4y2Ba xgydF4y2Ba ,你必须获得输出使用收集到的输入/输出数据训练数据和计算gydF4y2Ba 一个gydF4y2Ba 矩阵。gydF4y2Ba

u =数据(:,3:4);x_next =数据(:,5:6);fx = (A * inputData ') ';outputData = (x_next - fx)。/ u;gydF4y2Ba

对于这个示例,以确保再现性、负载pretrained网络。自己训练网络,集gydF4y2BatrainConstraintgydF4y2Ba来gydF4y2Ba真正的gydF4y2Ba。gydF4y2Ba

trainConstraint = false;gydF4y2Ba如果gydF4y2BatrainConstraint网络= trainConstraintPID (inputData outputData);gydF4y2Ba其他的gydF4y2Ba负载gydF4y2BatrainedNetworkPIDgydF4y2Ba网络gydF4y2Ba结束gydF4y2Ba

下面的图显示了一个示例的培训进度。gydF4y2Ba

模拟PID控制器与约束执行gydF4y2Ba

与约束执行模拟PID控制器,使用gydF4y2BatrackingWithLearnedConstraintPIDgydF4y2Ba模型。这个模型约束控制器输出然后将其应用到工厂。gydF4y2Ba

mdl =gydF4y2Ba“trackingWithLearnedConstraintPID”gydF4y2Ba;open_system (mdl)gydF4y2Ba

查看约束实现,打开约束子系统。在这里,训练神经网络近似gydF4y2Ba ggydF4y2Ba xgydF4y2Ba 基于当前植物状态和约束执行块强制约束函数。gydF4y2Ba

模拟模型和阴谋的结果。gydF4y2Ba

%模拟模型。gydF4y2Ba= sim (mdl);gydF4y2Ba%提取轨迹。gydF4y2BalogData = out.logsout;x1_traj = 0(大小(out.tout));x2_traj = 0(大小(out.tout));gydF4y2Ba为gydF4y2Bact = 1:尺寸(out.tout, 1) x1_traj (ct) = logData {4} .Values.Data (:,:, ct);x2_traj (ct) = logData {5} .Values.Data (:,:, ct);gydF4y2Ba结束gydF4y2Bax1_des = logData {2} .Values.Data;x2_des = logData {3} .Values.Data;gydF4y2Ba%绘制轨迹。gydF4y2Ba图(gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“跟踪与约束”gydF4y2Ba);情节(x1_des x2_des,gydF4y2Ba“r”gydF4y2Ba)包含(gydF4y2Bax1的gydF4y2Ba)ylabel (gydF4y2Ba“x2”gydF4y2Ba)举行gydF4y2Ba在gydF4y2Ba情节(x1_traj x2_traj,gydF4y2Ba”乙:“gydF4y2Ba,gydF4y2Ba“线宽”gydF4y2Ba,2)gydF4y2Ba在gydF4y2Ba情节(x1_traj (1) x2_traj (1),gydF4y2Ba“g *”gydF4y2Ba)举行gydF4y2Ba在gydF4y2Ba情节(x1_traj(结束),x2_traj(结束),gydF4y2Ba“去”gydF4y2Ba)传说(gydF4y2Ba“想要的”gydF4y2Ba,gydF4y2Ba“轨迹”gydF4y2Ba,gydF4y2Ba“开始”gydF4y2Ba,gydF4y2Ba“结束”gydF4y2Ba,gydF4y2Ba“位置”gydF4y2Ba,gydF4y2Ba“最佳”gydF4y2Ba)gydF4y2Ba

图跟踪与约束包含一个坐标轴对象。坐标轴对象包含4线类型的对象。这些对象表示期望的轨迹,开始,结束。gydF4y2Ba

约束执行块成功限制了控制行动,这样植物状态仍然小于1。gydF4y2Ba

bdclose (gydF4y2Ba“rlCollectDataPID”gydF4y2Ba)bdclose (gydF4y2Ba“trackingWithLearnedConstraintPID”gydF4y2Ba)gydF4y2Ba

引用gydF4y2Ba

[1]罗比,亚历山大,Haimin胡,Lars林德曼Hanwen张Dimos诉有着斯蒂芬•图和尼古拉Matni。“学习控制屏障功能从专家示威。”Preprint, submitted April 7, 2020.https://arxiv.org/abs/2004.03315gydF4y2Ba

另请参阅gydF4y2Ba

块gydF4y2Ba

应用程序gydF4y2Ba

相关的话题gydF4y2Ba