linearizebmi & solvebmi
はじめに,
ダウンロード,
マニュアル,
サンプルプログラム,
逐次LMI化法.
[ English / Japanese ]
- solvebmi
- solvebmiOptions
- linearizebmi
- linearizebmiOptions
構文
[gg,variables,outopts] = solvebmi(Fstr,{'X','Y'},options)
説明
solvebmi は BMI 制約付き最適化問題に対する近似解を計算する.
内部的で
linearizebmiを用いて逐次 LMI 化のための拡大 LMI を得ている他,
逐次 LMI 化法の適用に必要な初期暫定解を求めるコード,
局所最適解への収束性を改善するための正則化項の付加などが実装されている.
引数:
Name |
Type |
Description |
Flist |
文字列の cell 配列 |
BMI 制約の YALMIP format での記述 (文字列) |
vlist |
string in cell |
双線形項に含まれる決定変数行列の変数名
(文字列; sdpvar で宣言されたもの) |
g |
sdpvar |
目的関数 |
options |
struct |
オプション.
solvebmiOptions で設定. |
戻り値:
Name |
Type |
Description |
gg |
double |
達成された目的関数値 |
variables |
struct |
計算された決定変数 |
outopts |
struct |
目的関数値の履歴など |
例
次の定数出力フィードバックによる H∞問題 (BMI 問題)を考える.
\[
\begin{array}{ll}
\underset{\gamma,P,K}{\mathrm{minimize}} & \gamma \\
\mathrm{subject~to} & P \succ O, \\
~ &
\left[
\begin{array}{ccc}
\mathrm{He}(P(A+B_{2}KC_{2})) & P(B_{1} + B_{2}KD_{21}) & (C_{1} + D_{12}KC_{2})^\mathrm{T} \\
(B_{1} + B_{2}KD_{21})^\mathrm{T}P & -\gamma I & (D_{11} + D_{12}KD_{21})^\mathrm{T} \\
C_{1} + D_{12}KC_{2} & D_{11} + D_{12}KD_{21} & -\gamma I
\end{array}
\right] \prec O.
\end{array}
\]
-
問題を記述するデータ行列とそのサイズなどの定義.
n = ...;
m = ...;
a = ...;
b1 = ...;
.
.
.
-
決定変数 \(P\), \(K\), \(\gamma\) の定義.
P = sdpvar(n,n);
K = sdpvar(m,m);
g = sdpvar(1,1);
-
(オプション) 初期許容解がわかっている場合はその設定.
例えば \(P=I, K=O\) が許容解の場合, 以下で初期許容解を設定することができる.
assign(P,eye(n,n));
assign(K,zeros(n,n));
-
BMI および LMI 制約を YALMIP 文法で文字列として記述する.
Fstr1 = "-P";
Fstr2 = "[P*(a+b2*K*c2)+(P*(a+b2*K*c2))', P*(b1+b2*K*d21), (c1+d12*K*c2)';" +...
"(P*(b1+b2*K*d21))', -g*eye(nw,nw), (d11+d12*K*d21)';" +...
"c1+d12*K*c2, d11+d12*K*d21, -g*eye(nz)]";
Flist = {Fstr1,Fstr2};
-
solvezebmi を用いて与えられた BMI 問題を解く.
[gg,vars] = solvebmi(Flist,{'P','K'},g,options);
solvezebmi は options
によって
いくつかのタイプの拡大 LMI を指定することができる.
詳しくは サンプルプログラム を参照のこと.
-
得られた解は戻り値
vars
に構造体として含まれている.
vars.P
vars.K
vars.g
この問題では得られた決定変数 vars.g
と
目的関数値 gg
は一致する.
構文
opts = solvebmiOptions
opts = solvebmiOptions('NAME1',VALUE1,'NAME2',VALUE2,...)
opts = solvebmiOptions(OLDOPTIONS,'NAME1',VALUE1,'NAME2',VALUE2,...)
説明
solvebmiOptions は
solvebmi
の様々なオプションを設定する.
戻り値
opts
の field は以下の通り.
構造体
opts
の field:
Field 名 |
データ型 |
説明 |
yalmip |
struct |
内部で呼び出される YALMIP の optimize に渡されるオプション |
method |
int |
BMI を近似する拡大 LMI の種類の指定. |
lcmax |
int |
最大反復回数 |
stoptol |
double |
停止条件. 目的関数値の更新幅が stoptol 未満で反復を停止 |
penalty |
double |
目的関数に加える正則化項 \(\lambda\cdot\)||\(X\)||\({}_F\) の重み \(\lambda\)
(一定値)
|
regterm |
logical |
可変正則化項 \(\dfrac{\lambda}{\ell c}\cdot\)||\(X\)||\({}_F\)
を使う場合は 1. (\(\ell c\) は反復回数)
|
例
yalmipopts = sdpsettings;
yalmipopts = sdpsettings(yalmipopts,'solver','mosek');
opts = solvebmiOptions;
opts = solvebmiOptions(opts,'lcmax',1e3);
opts = solvebmiOptions(opts,'yalmip',yalmipopts);
構文
LMI = linearizebmi(Fstr,{'X','Y'},{'X0','Y0'})
LMI = linearizebmi(Fstr,{'X','Y'},{'X0','Y0'},'G')
LMI = linearizebmi(Fstr,{'X','Y'},{'X0','Y0'},'G',opts)
[LMI, LMIstr] = linearizebmi(Fstr,{'X','Y'},{'X0','Y0'},'G',opts)
説明
linearizebmiは,BMIの行列変数を文字列として受け取り,
拡大LMIの行列変数を返す関数である.
引数:
変数 | データ型 | 説明 |
Fstr | string | BMI の行列変数を表す文字列 |
{'X','Y'} |
string in cell | 決定変数 (sdpvar) の変数名 |
{'X0','Y0'} |
string in cell | 暫定解の変数 (sdpvar または数値) の変数名 |
'G' |
string | 分割行列 (数値) の変数名(指定なしの場合は単位行列) |
opts |
struct |
オプション.
linearizebmiOptions で設定.
|
戻り値:
変数 | データ型 | 説明 |
LMI | sdpvar | 拡大LMIの行列変数
|
Lstr | string | 拡大LMIの文字列 |
Lstr
は
Lstr'+Lstr
で拡大LMI に対応する.
例
BMI制約
$P(A+BKC)+(A+BKC)^\mathrm{T}P\prec O$
の記述について考える.
ここで決定変数行列は $P$ と $K$ とする.
- 問題の定義
n = 4;
m = 2;
A = rand(n,n);
B = rand(n,m);
C = rand(m,n);
- 決定変数行列 $P$, $K$
および拡大LMIのための分割行列 $G$
を定義する.
% 決定変数
P = sdpvar(n,n);
K = sdpvar(m,m);
% 暫定解
P0 = zeros(n,n);
K0 = zeros(m,m);
% 分割行列
G = eye(m,m);
暫定解を用いて繰り返し値を更新したい場合,
暫定解を決定変数sdpvarとして定義することもできる.
詳しくは
サンプルプログラム
を参照されたい.
-
BMI制約 $P(A+BKC)+(A+BKC)^\mathrm{T}\prec O$
に対する文字列を記述する.
Fstr = "P*(A+B*K*C)+(A+B*K*C)'*P";
-
linearizebmiを用いてBMIを拡大LMIに変換する.
% 行列変数
[LMI,Lstr] = linearizebmi(Fstr,{'P','K'},{'P0','K0'},'G');
% 制約
constraints = [LMI <= 0];
-
linearizebmi の出力
LMI
Linear matrix variable 6x6 (symmetric, real, 13 variables)
Coeffiecient range: 0.043024 to 3.4622
Lstr
LMI:
"(P-P0)*A+comp*C" "(P-P0)*B"
"G*(K-K0)*C" "-G"
comp:
"P0*B*K0+(P-P0)*B*K0+P0*B*(K-K0)"
Lstr
は Lstr'+Lstr
で拡大LMI に対応する.
構文
opts = linearizebmiOptions
opts = linearizebmiOptions('NAME1',VALUE1,'NAME2',VALUE2,...)
opts = LinearizebmiOptions(OLDOPTIONS,'NAME1',VALUE1,'NAME2',VALUE2,...)
説明
linearizebmiOptions は
linearizebmi
のオプションを設定する.
戻り値
opts
の field は以下の通り.
構造体
opts
の field:
Field 名 |
データ型 |
説明 |
method |
int |
BMI を近似する拡大 LMI の種類の指定
0: Sebe (2007)
1: Sebe (2018) (default)
2: Shimomura & Fujii (2005)
3: Lee & Hu (2016)
4: Ren et al. (2021)
|
参考文献:
- N. Sebe, A New Dilated LMI Characterization
and Iterative Control System Synthesis,
11th IFAC/IFORS/IMACS/IFIP Symposium on Large Scale Systems:
Theory and Applications (LSS 2007),
6 pages, 2007.
(IFAC Proceedings Volumes, 40-9, pp. 250-255, 2007)
doi:10.3182/20070723-3-PL-2917.00040
- N. Sebe,
Sequential Convex Overbounding Approximation Method
for Bilinear Matrix Inequality Problems,
9th IFAC Symposium on Robust Control Design (ROCOND'18),
pp. 175-182, 2018.
(IFAC-PapersOnLine, 51-25, pp. 102-109, 2018)
doi:10.1016/j.ifacol.2018.11.089
- T. Shimomura and T. Fujii,
Multiobjective control via successive over-bounding of quadratic terms,
International Journal of Robust and Nonlinear Control,
15-8, pp. 363-381, 2005.
doi:10.1002/rnc.997
- D. Lee and J. Hu,
A sequential parametric convex approximation method
for solving bilinear matrix inequalities,
2016 IEEE 55th Conference on Decision and Control (CDC),
pp. 1965-1970, 2016.
doi: 10.1109/CDC.2016.7798552
- Y. Ren, Q. Li, K.-Z. Liu, D.-W. Ding,
A successive convex optimization method
for bilinear matrix inequality problems
and its application to static output-feedback control,
International Journal of Robust and Nonlinear Control,
31-18, pp. 9709-9730, 2021.
doi:10.1002/rnc.5796
例
opts = solvebmiOptions;
opts = solvebmiOptions(opts,'method',1);
瀬部昇のホームに戻る
Last modified: Mon Mar 7 23:54:39 JST 2022