主要内容GydF4y2Ba

使用GydF4y2BafminimaxGydF4y2Ba使用Simul金宝appink®模型GydF4y2Ba

此示例显示了如何调整Simulink模型的参数。金宝app该模型,GydF4y2BaOptsim.GydF4y2Ba,包括在GydF4y2BaoptimGydF4y2Ba/GydF4y2Ba演示GydF4y2BaMATLAB®安装的文件夹。该模型包括一个非线性过程工厂,其建模为Simulink块图。金宝appGydF4y2Ba

带有驱动器饱和的工厂GydF4y2Ba

该工厂是具有致动器限制的阻尼三阶模型。致动器限制是饱和极限和转换速率限制。执行器饱和度极限切断大于2个单元或小于-2单元的输入值。执行器的转换速率限制为0.8单位/秒。显示系统到步进输入的闭环响应GydF4y2Ba闭环响应GydF4y2Ba.您可以通过打开模型(typeGydF4y2BaOptsim.GydF4y2Ba在命令行或单击型号名称),然后选择GydF4y2Ba跑GydF4y2Ba从GydF4y2Ba模拟GydF4y2Ba菜单。响应根据范围绘图。GydF4y2Ba

闭环响应GydF4y2Ba

问题是设计反馈控制环路,其跟踪对系统的单位步骤输入。闭环设备的块在植物和致动器位于分层子系统块中。范围块在设计过程中显示输出轨迹。GydF4y2Ba

闭环模型GydF4y2Ba

为了优化这个系统,在任何时候都要最小化输出的最大值GydF4y2Ba T.GydF4y2Ba 在0到100之间。(相比之下,在该示例中GydF4y2BaLSQNONLIN使用Simuli金宝appnk®模型GydF4y2Ba,解决方案涉及最小化输出和输入信号之间的误差。)GydF4y2Ba

此示例的代码包含在辅助功能中GydF4y2Baruntrackmm.GydF4y2Ba当GydF4y2Ba本例结束。GydF4y2Ba目标函数只是输出GydF4y2Bayou ..GydF4y2Ba返回的GydF4y2BaSIMGydF4y2Ba命令。但最小化所有时间步骤的最大输出可能强制输出远远低于统一,以便在某些时间步骤。在前20秒后保持0.95以上的输出,约束函数GydF4y2Batrackmmcon.GydF4y2Ba包含约束GydF4y2Ba你> = 0.95GydF4y2Ba从GydF4y2Bat = 20.GydF4y2Ba到GydF4y2BaT = 100.GydF4y2Ba.因为约束必须处于表单中GydF4y2Ba GGydF4y2Ba ≤.GydF4y2Ba 0.GydF4y2Ba ,功能中的约束是GydF4y2Bag = - 用(20:100)+ 0.95GydF4y2Ba.GydF4y2Ba

这两个GydF4y2Batrackmmobj.GydF4y2Ba和GydF4y2Batrackmmcon.GydF4y2Ba使用结果你GydF4y2BaSIMGydF4y2Ba,从当前PID值计算。避免两次调用模拟,GydF4y2Baruntrackmm.GydF4y2Ba有嵌套函数,因此GydF4y2Bayou ..GydF4y2Ba在目标函数和约束函数之间共享。只有当当前点改变时才调用模拟。GydF4y2Ba

称呼GydF4y2Baruntrackmm.GydF4y2Ba.GydF4y2Ba

[kp,ki,kd] = runtrackmmGydF4y2Ba
目的Max Line搜索方向Iter F-count值约束步长导数步骤05 0 1.11982 1 11 1.184 0.07978 1 0.482 2 17 1.012 0.04285 1 -0.236 3 23 0.9995 0.007058 1 -0.0186 Hessian修改两次GydF4y2Ba
4 29 0.9997 9.706E-07 1 0.00716 Hessian改性的地方最低可能。约束满足。Fminimax停止,因为当前搜索方向的尺寸小于步长尺寸公差的量的两倍,并且对约束公差的值满足约束。GydF4y2Ba
Kp = 0.5910GydF4y2Ba
ki = 0.0606.GydF4y2Ba
KD = 5.5383.GydF4y2Ba

最后一个值GydF4y2Ba客观价值GydF4y2Ba输出的列表明,所有时间步长的最大值就在1.下面的闭环响应下显示在图中GydF4y2Ba使用fminimax的闭环响应GydF4y2Ba.GydF4y2Ba

这个解不同于在GydF4y2BaLSQNONLIN使用Simuli金宝appnk®模型GydF4y2Ba因为你正在解决不同的问题配方。GydF4y2Ba

使用闭环响应GydF4y2BafminimaxGydF4y2Ba

辅助功能GydF4y2Ba

以下代码创建了GydF4y2Baruntrackmm.GydF4y2Ba辅助功能。GydF4y2Ba

函数GydF4y2Ba[kp,ki,kd] = runtrackmm OptsimGydF4y2Ba%初始化simulink(金宝appr)GydF4y2BaPID0 = [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'iter'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,CEQ] = TrackMmcon(PID)GydF4y2Ba%跟踪Optsim的输出到1的信号。GydF4y2Ba%变量yout与runtrackmm共享,GydF4y2Ba% TRACKMMOBJGydF4y2BaUpdateIfneeded(PID)C =  -  YOUT(20:100)+。95;CEQ = [];GydF4y2Ba结尾GydF4y2Ba函数GydF4y2BaUpdateIfneeded(PID)GydF4y2Ba如果GydF4y2Ba〜Isequal(PID,POLD)GydF4y2Ba仅在需要时才计算%GydF4y2Bakp = pid(1);ki = pid(2);KD = PID(3);[〜,〜,yout] = sim(GydF4y2Ba“optsim”GydF4y2Ba, 100年[0],选择);pold = pid;GydF4y2Ba结尾GydF4y2Ba结尾GydF4y2Ba结尾GydF4y2Ba

也可以看看GydF4y2Ba

相关的话题GydF4y2Ba