主要内容gydF4y2Ba

使用gydF4y2BafminimaxgydF4y2Ba使用Simulink模型gydF4y2Ba

这个例子展示了如何调优Simulink®模型的参数。模型,gydF4y2BaoptsimgydF4y2Ba,在运行此示例时包含。该模型包括一个模拟为Simulink框图的非线性过程装置。gydF4y2Ba

执行器饱和装置gydF4y2Ba

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

闭环反应gydF4y2Ba

问题是设计一个反馈控制回路,跟踪单位步长输入到系统。闭环设备是按照设备和执行器位于分层子系统块中的块来输入的。Scope块显示设计过程中的输出轨迹。gydF4y2Ba

闭环模型gydF4y2Ba

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

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

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

调用gydF4y2BaruntrackmmgydF4y2Ba.gydF4y2Ba

[Kp,Ki,Kd] = runtrackmmgydF4y2Ba
目的最大行搜索定向Iter f计数值约束步长导数程序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.708e-07 1 0.00716可能的黑森修正局部最小值。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,约束条件满足到约束公差值之内。gydF4y2Ba
Kp = 0.5910gydF4y2Ba
Ki = 0.0606gydF4y2Ba
Kd = 5.5383gydF4y2Ba

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

这个解不同于gydF4y2Balsqnonlin与Simulink模型gydF4y2Ba因为你在解决不同的问题公式。gydF4y2Ba

闭环响应使用gydF4y2BafminimaxgydF4y2Ba

Helper函数gydF4y2Ba

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

函数gydF4y2Ba[Kp, Ki, Kd] = runtrackmm optsimgydF4y2Ba初始化Simulink(R)gydF4y2BaPid0 = [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,ceq] = 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);[~,~,yout] = sim(gydF4y2Ba“optsim”gydF4y2Ba, 100年[0],选择);Pold = pid;gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba

另请参阅gydF4y2Ba

相关的话题gydF4y2Ba

Baidu
map