多目的到达の最化化
この例,目的到达法使っ极の问题问题を解く方法を说明ししますます。このアルゴリズムアルゴリズムFgoalattain
によって実装し。
システムのを记述する式式
2入力,出力なプラントをますシステムシステムシステム の変化を記述する方程式は以下のとおりです。
ここで, は(制御)信号信号。システム出力はのとおりです。
行列 , , は以下のとおりです。
a = [-0.5 0 0;0 -2 10;0 1 -2];b = [1 0;-2 2;0 1];C = [1 0 0;0 0 1];
最适化目的
次のに,制御信号 が出力 に比例すると設定する場合について考えます。
ここで は行列です。
これは,システム の変化のようなることをし。。。
最适化目的は、以下の 2 つの特性をもつように を设计するです。
1。 の固有のが[-5,-3,-1]より(これこれ制御で极とれれ
2. ABS(ABS( )<= 4( の各要素-4〜4のであるである)。)。
最適化を解くために、まず多目的ゴールを設定します。
goal = [-5, -3, -1];
ゴールに设定してゴール劣到达または到达が同じ同じ割合にになるようように。
重量= ABS(目标);
出力フィードバックを初期化。。
k0 = [-1 -1;-1 -1];
コントローラーに上限と下限を設定します。
lb = repmat(-4,size(k0))
lb =2×2-4 -4 -4 -4
ub = repmat(4,大小(k0))
ub =2×24 4 4 4
反复ごとがられるように,表示パラメーターを设定し。
options = optimoptions('fgoalattain',,,,'Display',,,,'iTer');
闭ループ固有値をベクトルベクトルベクトル关数关数をををします。この关数にには,,,追加ののパラメーターパラメーターパラメーター , ,および )が必要です。これらのパラメーターを渡す最も都合の良い方法は、次のように無名関数を介して渡すというものです。
eigfun = @(K) sort(eig(A+B*K*C));
最適化ソルバーの呼び出し
最适を开始するににFgoalattain
を呼び出します。
[k,〜,tastainFactor] =...fgoalattain(eigfun,k0,目标,重量,[],[],[],[],[],lb,ub,[],options);
Attainment Max Line search Directional Iter F-count factor constraint steplength derivative Procedure 0 6 0 1.88521 1 13 1.031 0.02998 1 0.745 2 20 0.3525 0.06863 1 -0.613 3 27 -0.1706 0.1071 1 -0.223 Hessian modified 4 34 -0.2236 0.06654 1 -0.234 Hessian修改两次两次5 41 -0.3568 0.007894 1 -0.0812 6 48 -0.3645 0.000145 0.000145 1 -0.164 HESSIAN修改7 55 -0.3645 0 1 -0.00515 HESSIAN HESSIAN MOTIFIED 8 62 -0.3675 0.000.000.000.000.0001549.1549 1 -07812 HESSIN修改10 76 -0.3862 0 1 0.00568 11 83 -0.3863 5.365E -13 1 -0.998 HESSIAN可能进行了两次最小值。满足的约束。Fgoalattain停止了,因为当前搜索方向的大小小于步长公差的值的两倍,并且在约束公差的值之内满足了约束。
解における制御パラメーターの値は以下のとおりです。
k
k=2×2-4.0000 -0.2564 -4.0000 -4.0000
闭ループシステム固有eigfun(k)ははのとおりです(fval fvalにに格纳さ。。。。。
eigfun(k)
ans =3×1-6.9313 -4.1588 -1.4099
到达因子ゴールのレベルを示し。负到达到达因子因子过到达到达到达到达をを示し示し示し示し,ののの到达到达因子因子因子因子因子因子ははははははは劣到达劣到达劣到达劣到达劣到达劣到达劣到达劣到达劣到达をををををを示し示し示し示しされことを意味。。
attainfactor
attainFactor = -0.3863
颂歌のでシステム変化を示す示す
ここで,されたフィード行列行列 を点点x(0)= [1; 1; 1; 1]から始め,システム が0からから时刻までどのに変化か示しています。。
まず、微分方程式を解きます。
[Times, xvals] = ode45(@(u,x)((A + B*K*C)*x),[0,4],[1;1;1]);
次に结果をプロット。。
情节(times,xvals)传奇('x_1(t)',,,,'x_2(t)',,,,'x_3(t)',,,,'Location',,,,'最好的')Xlabel('t');ylabel('x(t)');
ゴールをに达成ように设定する
固有値をできるだけゴール値 [-5, -3, -1] に近くすることが必要と仮定します。options.EqualityGoalCount
を,ゴール近い(つまりつまりにしない)目的目的数に设定ます。
3つのすべてゴールなるべく近いことが。。。
options.equalitygoalCount = 3;
最適化ソルバーの呼び出し
最適化ソルバーを呼び出す準備が整いました。
[k,fval,attainFactor,Exitflag,输出,lambda] =...fgoalattain(eigfun,k0,目标,重量,[],[],[],[],[],lb,ub,[],options);
Attainment Max Line search Directional Iter F-count factor constraint steplength derivative Procedure 0 6 0 1.88521 1 13 1.031 0.02998 1 0.745 2 20 0.3525 0.06863 1 -0.613 3 27 0.1528 -0.009105 1 -0.22 Hessian modified 4 34 0.02684 0.03722 1 -0.166 Hessian modified5 41 -3.469E-18 0.005702 1 -0.116 HESSIAN修改6 48 -1.241E-199.653E-06 1 2.88E-16 HESSIAN修改7 55 6.485E-21 4.756E 4.756E-11 1 6.87E-15 HESS-15 HESS-15 HESS-15 HESS-15 HESS HESS MINIEM MINIEM可能的。满足的约束。Fgoalattain停止了,因为当前搜索方向的大小小于步长公差的值的两倍,并且在约束公差的值之内满足了约束。
この解制御の値以下のとおりです。
k
k=2×2-1.5954 1.2040 -0.4201 -2.9046
今回の閉ループシステムの固有値(出力fvalでも保持されます)は,以下のようになります。
eigfun(k)
ans =3×1-5.0000 -3.0000 -1.0000
到达は到达のレベルをます。负の到达因子过到达到达をを示し示し示し,,正のの到达因子因子はは劣到达劣到达を示し示します。。得得得られ到达到达到达到达満たしてことをています。
attainfactor
fatainFactor = 6.4855e-21
odeの解新しいシステムの示す示す示す
ここで,され新しいフィードバック行列 を点点x(0)= [1; 1; 1; 1]から始め,システム が0からから时刻までどのに変化か示しています。。
まず、微分方程式を解きます。
[Times, xvals] = ode45(@(u,x)((A + B*K*C)*x),[0,4],[1;1;1]);
次に结果をプロット。。
情节(times,xvals)传奇('x_1(t)',,,,'x_2(t)',,,,'x_3(t)',,,,'Location',,,,'最好的')Xlabel('t');ylabel('x(t)');