在 Simulink 中设计模型参考神经控制器
神经模型参考控制架构使用两个神经网络:控制器网络和被控对象模型网络,如下图所示。首先识别被控对象模型,然后训练控制器,使被控对象输出在参考模型输出之后。

下图显示在 Deep Learning Toolbox™ 软件中实现的神经网络被控对象模型和神经网络控制器的细节。每个网络有两个层,您可以选择在隐藏层中使用的神经元数量。有三组控制器输入:
延迟的参考输入
延迟的控制器输出
延迟的被控对象输出
对于上述每一种输入,您都可以选择要使用的延迟值数目。通常,延迟的数目随着被控对象的阶数而增大。神经网络被控对象模型有两组输入:
延迟的控制器输出
延迟的被控对象输出
与控制器一样,您可以设置延迟的数目。下一节将说明如何设置参数。

使用 Model Reference Controller 模块
注意
要设计模型参考自适应控制器,您还可以使用 Model Reference Adaptive Control (Simulink Control Design) Simulink® 模块。
建议使用此工作流,因为它具有以下优势:
简化控制器设计。
只需要被控对象模型动态特性的初始估计值。
自动表征扰动和模型不确定性,如单隐藏层神经网络。然后该模块会实时更新控制器参数,以消除受控系统中的这些扰动和不确定性,从而无需您手动进行重新调整。有关使用单隐藏层神经网络的详细信息,请参阅扰动和不确定性模型 (Simulink Control Design)。
支持代码生成。
有关如何使用这些工具的示例,请参阅Quadrotor Control Using Model Reference Adaptive Control (Simulink Control Design)。
本节说明如何训练神经网络控制器。第一步是将 Model Reference Controller 模块从 Deep Learning Toolbox 模块集复制到 Simulink 编辑器。如果您不确定如何操作,请参阅 Simulink 文档。在以下示例中跳过此步骤。
Deep Learning Toolbox 软件附带示例模型,以说明如何使用模型参考控制器。此示例的目标是控制简单的单链机械臂的运动,如下图所示:

机械臂的运动方程是
其中,ϕ 是机械臂的角度,u 是 DC 电机提供的扭矩。
目标是训练控制器,使机械臂跟踪参考模型
其中 yr 是参考模型的输出,r 是输入参考信号。
此示例使用具有 5-13-1 架构的神经网络控制器。控制器的输入由两个延迟的参考输入、两个延迟的被控对象输出和一个延迟的控制器输出组成。使用的是 0.05 秒的采样间隔。
要运行此示例,请执行下列步骤:
启动 MATLAB®。
在 MATLAB 命令行窗口中键入
mrefrobotarm。此命令将打开 Simulink 编辑器,模型中已有 Model Reference Controller 模块。
双击 Model Reference Controller 模块。这将打开以下窗口,用于训练模型参考控制器。

下一步通常是点击被控对象辨识,这将打开“被控对象辨识”窗口。然后您将训练被控对象模型。由于“被控对象辨识”窗口与先前的控制器使用的窗口相同,此处省略了该过程。
点击生成训练数据。程序开始生成用于训练控制器的数据。在数据生成后,将出现以下窗口。

点击接受数据。返回到“模型参考控制”窗口,并点击训练控制器。程序将向网络提供一段数据,并按照指定的迭代次数(本例中为 5 次)训练网络。此过程将一次执行一个片段,直到整个训练集都呈现给网络。控制器训练的耗时可能明显大于被控对象模型训练的耗时。这是因为必须使用动态反向传播来训练控制器(请参阅 [HaJe99])。训练完成后,将显示生成的闭环系统的响应,如以下图窗中所示。

返回到“模型参考控制”窗口。如果控制器的性能不精确,您可以再次选择训练控制器,这将使用相同的数据集继续训练控制器。如果要使用新数据集继续训练,在选择训练控制器之前,请先选择生成数据或导入数据。(如果您要继续使用相同的权重进行训练,请确保选择使用当前权重。)可能还需要重新训练被控对象模型。如果被控对象模型不精确,则可能会影响控制器训练。对于此示例,控制器应该是足够精确的,因此请选择确定。这会将控制器权重加载到 Simulink 模型中。
返回 Simulink 编辑器,选择菜单选项仿真 > 运行开始仿真。当仿真运行时,显示被控对象输出和参考信号,如以下图窗中所示。
