linearizebmi & solvebmi

はじめに, ダウンロード, マニュアル, サンプルプログラム, 逐次LMI化法.   [ English / Japanese ]

マニュアル

  1. solvebmi
  2. solvebmiOptions
  3. linearizebmi
  4. linearizebmiOptions


solvebmi

構文

   [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} \]
  1. 問題を記述するデータ行列とそのサイズなどの定義.
              n = ...;
              m = ...;
              a = ...;
              b1 = ...;
              .
              .
              .
            
  2. 決定変数 \(P\), \(K\), \(\gamma\) の定義.
              P = sdpvar(n,n);
              K = sdpvar(m,m);
              g = sdpvar(1,1);
            
  3. (オプション) 初期許容解がわかっている場合はその設定.
    例えば \(P=I, K=O\) が許容解の場合, 以下で初期許容解を設定することができる.
              assign(P,eye(n,n));
              assign(K,zeros(n,n));
            
  4. 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};
            
  5. solvezebmi を用いて与えられた BMI 問題を解く.
              [gg,vars] = solvebmi(Flist,{'P','K'},g,options);
            
    solvezebmioptions によって いくつかのタイプの拡大 LMI を指定することができる. 詳しくは サンプルプログラム を参照のこと.

  6. 得られた解は戻り値 vars に構造体として含まれている.
              vars.P
              vars.K
              vars.g
            
    この問題では得られた決定変数 vars.g と 目的関数値 gg は一致する.


solvebmiOptions

構文

     opts = solvebmiOptions
     opts = solvebmiOptions('NAME1',VALUE1,'NAME2',VALUE2,...)
     opts = solvebmiOptions(OLDOPTIONS,'NAME1',VALUE1,'NAME2',VALUE2,...)

説明

solvebmiOptionssolvebmi の様々なオプションを設定する. 戻り値 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);


linearizebmi

構文

   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の行列変数を返す関数である.

引数:
変数データ型説明
FstrstringBMI の行列変数を表す文字列
{'X','Y'} string in cell決定変数 (sdpvar) の変数名
{'X0','Y0'} string in cell暫定解の変数 (sdpvar または数値) の変数名
'G' string分割行列 (数値) の変数名(指定なしの場合は単位行列)
opts struct オプション. linearizebmiOptions で設定.

戻り値:
変数データ型説明
LMIsdpvar拡大LMIの行列変数
Lstrstring拡大LMIの文字列

LstrLstr'+Lstr で拡大LMI に対応する.

BMI制約 $P(A+BKC)+(A+BKC)^\mathrm{T}P\prec O$ の記述について考える. ここで決定変数行列は $P$ と $K$ とする.
  1. 問題の定義
          n = 4;
          m = 2;
          A = rand(n,n);
          B = rand(n,m);
          C = rand(m,n);
        
  2. 決定変数行列 $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として定義することもできる. 詳しくは サンプルプログラム を参照されたい.

  3. BMI制約 $P(A+BKC)+(A+BKC)^\mathrm{T}\prec O$ に対する文字列を記述する.
          Fstr = "P*(A+B*K*C)+(A+B*K*C)'*P";
      
  4. linearizebmiを用いてBMIを拡大LMIに変換する.
          % 行列変数
          [LMI,Lstr] = linearizebmi(Fstr,{'P','K'},{'P0','K0'},'G');
          % 制約
          constraints = [LMI <= 0];
      
  5. 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)"
      
    LstrLstr'+Lstr で拡大LMI に対応する.


linearizebmiOptions

構文

     opts = linearizebmiOptions
     opts = linearizebmiOptions('NAME1',VALUE1,'NAME2',VALUE2,...)
     opts = LinearizebmiOptions(OLDOPTIONS,'NAME1',VALUE1,'NAME2',VALUE2,...)

説明

linearizebmiOptionslinearizebmi のオプションを設定する. 戻り値 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)
参考文献:
  1. 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
  2. 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
  3. 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
  4. 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
  5. 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);


瀬部昇のホームに戻る
sebe[a]ics.kyutech.ac.jp
Last modified: Mon Mar 7 23:54:39 JST 2022