万博1manbetxSimulinkモデルでのgydF4y2BafminimaxgydF4y2Ba
の使用gydF4y2Ba
この例では,万博1manbetxSimulink®モデルのパラメタを調整する方法を示します。この例を実行すると,モデルgydF4y2BaoptsimgydF4y2Ba
が含まれます。このモデルは仿万博1manbetx真软件ブロック線図としてモデル化された非線形プロセスプラントを含みます。gydF4y2Ba
飽和要素を含むアクチュエタをもプラントgydF4y2Ba
このプラントは,アクチュエタに制限をも低減衰の3次のモデルです。アクチュエタは,飽和制限とスルレト制限をもます。アクチュエ,タの飽和制限により,入力値が最大2単位,最小-2単位の範囲に制限されます。そしてその変化率も0.8単位/秒以内としています。ステップ入力のシステムの閉ル,プ応答をgydF4y2Ba閉ル,プ応答gydF4y2Baに示します。(コマンドラescンでgydF4y2BaoptsimgydF4y2Ba
と入力するか,モデル名をクリックして)モデルを開き,gydF4y2Ba[シミュレ,ション]gydF4y2Baメニュ,からgydF4y2Ba[実行]gydF4y2Baを選択すると,この応答を確認できます。応答は范围ブロックにプロット表示されます。gydF4y2Ba
閉ル,プ応答gydF4y2Ba
問題は,システムへの単位ステップ入力をトラックするフィ,ドバック制御ル,プの設計です。閉ループプラントは,プラントとアクチュエータをまとめて1つの階層構造の子系统ブロックとして表します。范围ブロックは,設計プロセスの間,出力軌跡を表示します。gydF4y2Ba
閉ル,プモデルgydF4y2Ba
このシステムを最適化するには,0と100の間の任意の時刻gydF4y2Ba での出力の最大値を最小にします。(対照的に,gydF4y2Ba万博1manbetxSimulinkモデルでのlsqnonlingydF4y2Baの例では,出力と入力信号の間の誤差を最小化して解を求めます。)gydF4y2Ba
この例のコ,ドは,補助関数gydF4y2BaruntrackmmgydF4y2Ba
に含まれています(gydF4y2Baの例の終わりに掲載)。gydF4y2Ba目的関数は,単にgydF4y2Basim卡gydF4y2Ba
コマンドによって返される出力gydF4y2Ba你gydF4y2Ba
です。しかし,全タイムステップで最大出力を最小化すると,いくつかのタイムステップに対して出力が1よりはるかに小さくなる可能性があります。はじめの20秒後,0.95を超える出力を保ために,制約関数gydF4y2BatrackmmcongydF4y2Ba
はgydF4y2BaT = 20gydF4y2Ba
からgydF4y2BaT = 100gydF4y2Ba
まで制約gydF4y2BaYout >= 0.95gydF4y2Ba
を含みます。制約はgydF4y2Ba
の形式でなければならないので,関数における制約はgydF4y2BaG = -yout(20:100) + 0.95gydF4y2Ba
です。gydF4y2Ba
trackmmobjgydF4y2Ba
とgydF4y2BatrackmmcongydF4y2Ba
は共に現在のpid値から計算されたgydF4y2Basim卡gydF4y2Ba
からの結果youtを使用します。シミュレ,ションを2回呼び出さないようにするために,gydF4y2BaruntrackmmgydF4y2Ba
では入れ子関数になっており,gydF4y2Ba你gydF4y2Ba
の値が目的関数と制約関数で共有されるようになっています。シミュレ,ションは現在の点が変化した場合にのみ呼び出されます。gydF4y2Ba
runtrackmmgydF4y2Ba
を呼び出します。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.706e-07 1 0.00716黑森修改局部最小可能。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。gydF4y2Ba
Kp = 0.5910gydF4y2Ba
Ki = 0.0606gydF4y2Ba
Kd = 5.5383gydF4y2Ba
出力のgydF4y2Ba客观价值gydF4y2Ba
列の最後の値は,全タイムステップに対する最大値が1よりわずかに少ない値であることを表しています。閉ル,プ応答の結果を図gydF4y2BaFminimaxを使用する閉ル,プ応答gydF4y2Baに示します。gydF4y2Ba
この解は問題の定式化を異なる方法で行ったgydF4y2Ba万博1manbetxSimulinkモデルでのlsqnonlingydF4y2Baの解とは異なります。gydF4y2Ba
fminimaxgydF4y2Ba
を使用する閉ル,プ応答gydF4y2Ba
補助関数gydF4y2Ba
次のコ,ドは補助関数gydF4y2BaruntrackmmgydF4y2Ba
を作成します。gydF4y2Ba
函数gydF4y2Ba[Kp, Ki, Kd] = runtrackmm optsimgydF4y2Ba初始化Simulink(R万博1manbetx)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