主要内容gydF4y2Ba

使用gydF4y2BaFminimax.gydF4y2Ba使用Simul金宝appink®模型gydF4y2Ba

这个示例展示了如何调优Simulink模型的参数。金宝app模型,gydF4y2BaoptsimgydF4y2Ba,包括在gydF4y2Ba优化gydF4y2Ba/gydF4y2Ba演示gydF4y2Ba您的MATLAB®安装文件夹。该模型包括一个非线性过程装置,其建模为一个Simulink框图。金宝appgydF4y2Ba

植物饱和子饱和度gydF4y2Ba

该装置是一个带有执行器限制的欠阻尼三阶模型。驱动器的限制是一个饱和限制和一个旋转速率限制。执行器饱和极限切断大于2个单元或小于-2个单元的输入值。执行机构的旋转速率限制为0.8个单位/秒。系统对阶跃输入的闭环响应如gydF4y2Ba闭环反应gydF4y2Ba.您可以通过打开模型来查看此响应(类型gydF4y2BaoptsimgydF4y2Ba在命令行或单击模型名称),并选择gydF4y2Ba运行gydF4y2Ba来自gydF4y2Ba模拟gydF4y2Ba菜单。响应地图到范围。gydF4y2Ba

闭环反应gydF4y2Ba

问题是设计一个反馈控制回路,跟踪单位阶跃输入到系统。闭环装置是按照装置和执行器位于层次子系统块中的块进入的。范围块在设计过程中显示输出轨迹。gydF4y2Ba

闭环模型gydF4y2Ba

要优化该系统,请尽量减少随时输出的最大值gydF4y2Ba tgydF4y2Ba 在0到100之间。(相反,在本例中gydF4y2Balsqnonlin与Simulin金宝appk®模型gydF4y2Ba,解决方案包括最小化输出和输入信号之间的误差。)gydF4y2Ba

此示例的代码包含在帮助函数中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
目标最大线路搜索定向磨损器F计值约束步骤Steplength衍生步骤0 5 0 1.11982 11 1.184 0.07978 1 0.482 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.5910.gydF4y2Ba
Ki = 0.0606gydF4y2Ba
Kd = 5.5383gydF4y2Ba

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

该溶液与所获得的溶液不同gydF4y2Balsqnonlin与Simulin金宝appk®模型gydF4y2Ba因为你在解决不同的问题公式。gydF4y2Ba

闭环响应使用gydF4y2BaFminimax.gydF4y2Ba

Helper函数gydF4y2Ba

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

功能gydF4y2Ba[Kp, Ki, Kd] = runtrackmm optsimgydF4y2Ba%初始化模型(R)金宝appgydF4y2BaPid0 = [0.63 0.0504 1.9688];gydF4y2Ba% a1, a2, yout与TRACKMMOBJ和TRACKMMCON共享gydF4y2BaA1 = 3;A2 = 43;gydF4y2Ba初始化模型中的植物变量gydF4y2Bayout = [];gydF4y2Ba%给你一个初始值gydF4y2Bapold = [];gydF4y2Ba%曲目最后一个PIDgydF4y2Baopt = 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%trackmmobj.gydF4y2BaupdateIfNeeded(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,[0 100],选择;pold = pid;gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba

另请参阅gydF4y2Ba

相关话题gydF4y2Ba