主要内容gydF4y2Ba

使用gydF4y2BafminimaxgydF4y2Ba使用Simul金宝appink模型gydF4y2Ba

这个例子展示了如何调优Simulink®模型的参数。金宝app模型,gydF4y2BaoptsimgydF4y2Ba,在运行此示例时包含。该模型包括一个以Simulink框图为模型的非线性工艺装置。金宝appgydF4y2Ba

执行器饱和装置gydF4y2Ba

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

闭环反应gydF4y2Ba

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

闭环模型gydF4y2Ba

为了优化这个系统,在任何时候都要使输出的最大值最小化gydF4y2Ba tgydF4y2Ba 在0到100之间。(相反,在这个例子中gydF4y2Balsqnonlin与Simulin金宝appk模型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使用yout的结果gydF4y2Basim卡gydF4y2Ba,由当前PID值计算。为了避免两次调用模拟,gydF4y2BaruntrackmmgydF4y2Ba有嵌套函数,使值gydF4y2Ba你gydF4y2Ba在目标函数和约束函数之间共享。只有在当前点发生变化时才调用模拟。gydF4y2Ba

调用gydF4y2BaruntrackmmgydF4y2Ba.gydF4y2Ba

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

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

这个解与中得到的解不同gydF4y2Balsqnonlin与Simulin金宝appk模型gydF4y2Ba因为你们在解决不同的问题公式。gydF4y2Ba

闭环响应使用gydF4y2BafminimaxgydF4y2Ba

Helper函数gydF4y2Ba

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

函数gydF4y2Ba[Kp, Ki, Kd] = runtrackmm optsimgydF4y2Ba初始化Simulink(R金宝app)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],选择);波尔德= pid;gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba

另请参阅gydF4y2Ba

相关的话题gydF4y2Ba