主要内容gydF4y2Ba

使用gydF4y2BafminimaxgydF4y2Ba使用Simul万博1manbetxink®模型gydF4y2Ba

这个例子展示了如何调优Simulink模型的参数。万博1manbetx模型,gydF4y2BaoptsimgydF4y2Ba,包括在gydF4y2BaoptimgydF4y2Ba/gydF4y2Ba演示gydF4y2Ba您的MATLAB®安装的文件夹。该模型包括一个以Simulink框图为模型的非线性过程工厂。万博1manbetxgydF4y2Ba

带有驱动器饱和的工厂gydF4y2Ba

该工厂是一个欠阻尼的三阶模型与执行机构的限制。执行机构的限制是饱和限制和回转速率限制。执行器饱和限位切断大于2单位或小于-2单位的输入值。驱动器的转换速率限制为0.8单位/秒。系统对阶跃输入的闭环响应如图所示gydF4y2Ba闭环反应gydF4y2Ba.您可以通过打开模型(typegydF4y2BaoptsimgydF4y2Ba在命令行或单击模型名称),并选择gydF4y2Ba运行gydF4y2Ba从gydF4y2Ba模拟gydF4y2Ba菜单。响应根据范围绘图。gydF4y2Ba

闭环反应gydF4y2Ba

问题是设计一个反馈控制回路来跟踪系统的单位阶跃输入。闭环装置是根据装置和执行器位于分级子系统中的块进入的。在设计过程中,Scope块显示输出轨迹。gydF4y2Ba

闭环模型gydF4y2Ba

为了优化这个系统,在任何时候都要最小化输出的最大值gydF4y2Ba tgydF4y2Ba 在0到100之间。(相反,在例子中gydF4y2Balsqnonlin与Simulin万博1manbetxk®模型gydF4y2Ba,解决方案包括最小化输出和输入信号之间的误差。)gydF4y2Ba

这个例子的代码包含在helper函数中gydF4y2BaruntrackmmgydF4y2Ba在gydF4y2Ba本例结束。gydF4y2Ba目标函数就是输出gydF4y2Ba你gydF4y2Ba返回的gydF4y2Basim卡gydF4y2Ba命令。但是最小化所有时间步骤的最大输出可能会迫使某些时间步骤的输出远低于统一值。为了在前20秒后保持输出高于0.95,约束函数gydF4y2BatrackmmcongydF4y2Ba包含约束gydF4y2Ba你> = 0.95gydF4y2Ba从gydF4y2Bat = 20gydF4y2Ba来gydF4y2Bat = 100gydF4y2Ba.因为约束必须在表单中gydF4y2Ba ggydF4y2Ba ≤gydF4y2Ba 0gydF4y2Ba ,函数中的约束为gydF4y2BaG = -yout(20:100) + 0.95gydF4y2Ba.gydF4y2Ba

这两个gydF4y2BatrackmmobjgydF4y2Ba和gydF4y2BatrackmmcongydF4y2Ba使用yout的结果gydF4y2Basim卡gydF4y2Ba,由当前PID值计算。为了避免两次调用模拟,gydF4y2BaruntrackmmgydF4y2Ba有嵌套函数,因此gydF4y2Ba你gydF4y2Ba在目标函数和约束函数之间共享。只有当当前点改变时才调用模拟。gydF4y2Ba

调用gydF4y2BaruntrackmmgydF4y2Ba.gydF4y2Ba

(Kp、Ki Kd) = runtrackmmgydF4y2Ba
目的Max Line search Directional Iter F-count value constraint steplength derivativegydF4y2Ba
5 35 0.9996 2.272 -09 1 -0.0175 Hessian修正两次局部最小可能。约束满足。Fminimax停止,因为目标函数的预测变化小于函数公差的值,约束条件满足到约束公差的值之内。gydF4y2Ba
Kp = 0.5894gydF4y2Ba
Ki = 0.0605gydF4y2Ba
Kd = 5.5295gydF4y2Ba

的最后一个值gydF4y2Ba客观价值gydF4y2Ba输出的列显示所有时间步长的最大值都小于1。这个结果的闭环响应如图所示gydF4y2Ba使用fminimax的闭环响应gydF4y2Ba.gydF4y2Ba

这个解不同于在gydF4y2Balsqnonlin与Simulin万博1manbetxk®模型gydF4y2Ba因为你在解决不同的问题。gydF4y2Ba

闭环响应使用gydF4y2BafminimaxgydF4y2Ba

Helper函数gydF4y2Ba

下面的代码创建gydF4y2BaruntrackmmgydF4y2Bahelper函数。gydF4y2Ba

函数gydF4y2Ba[font =宋体][font =宋体gydF4y2Ba%初始化模型(R)万博1manbetxgydF4y2BaPid0 = [0.63 0.0504 1.9688];gydF4y2Ba% a1, a2, yout与TRACKMMOBJ和TRACKMMCON共享gydF4y2Baa1 = 3;a2 = 43;gydF4y2Ba%初始化模型中的植物变量gydF4y2Ba你= [];gydF4y2Ba给你一个初始值gydF4y2Bapold = [];gydF4y2Ba%跟踪最后pidgydF4y2Ba选择= simset (gydF4y2Ba“规划求解”gydF4y2Ba,gydF4y2Ba“ode5”gydF4y2Ba,gydF4y2Ba“SrcWorkspace”gydF4y2Ba,gydF4y2Ba“当前”gydF4y2Ba);选择= optimset (gydF4y2Ba“显示”gydF4y2Ba,gydF4y2Ba“通路”gydF4y2Ba,gydF4y2Ba...gydF4y2Ba“TolX”gydF4y2Ba, 0.001,gydF4y2Ba“TolFun”gydF4y2Ba, 0.001);pid = fminimax (@trackmmobj pid0 ,[],[],[],[],[],[],gydF4y2Ba...gydF4y2Ba@trackmmcon选项);Kp = pid (1);Ki = pid (2);Kd = pid (3);gydF4y2Ba函数gydF4y2BaF = trackmmobj (pid)gydF4y2Ba%跟踪optsim的输出到信号为1。gydF4y2Ba%变量a1和a2与RUNTRACKMM共享。gydF4y2Ba%变量yout与RUNTRACKMM和gydF4y2Ba% RUNTRACKMMCON。gydF4y2BaupdateIfNeeded(pid) F = yout;gydF4y2Ba结束gydF4y2Ba函数gydF4y2Ba测查[c] = trackmmcon (pid)gydF4y2Ba%跟踪optsim的输出到信号为1。gydF4y2Ba%变量yout与RUNTRACKMM和gydF4y2Ba% TRACKMMOBJgydF4y2BaupdateIfNeeded(pid) c = -yout(20:100)+.95;测查= [];gydF4y2Ba结束gydF4y2Ba函数gydF4y2BaupdateIfNeeded (pid)gydF4y2Ba如果gydF4y2Bapold ~ isequal (pid)gydF4y2Ba%只在需要时计算gydF4y2BaKp = pid (1);Ki = pid (2);Kd = pid (3);[~, ~,你]= sim卡(gydF4y2Ba“optsim”gydF4y2Ba, 100年[0],选择);pold = pid;gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba

另请参阅gydF4y2Ba

相关的话题gydF4y2Ba