0
大学数学基礎解説
文献あり

線形相補性問題におけるQ行列の判定方法

125
0

はじめに

本記事では、線形相補性問題(linear complementarity problem; LCP)において重要な行列クラスであるQ行列の判定方法を紹介します。Q行列はLCPが解を持つための必要十分な条件となる行列クラスです。所与の行列がQ行列であるかを判定できるということは、その行列を入力とするLCPが解を持つかを判定できることになります。

前提知識

本記事では、以下に示す事柄を前提知識といたします。詳細は[1]をご参照ください。内容の復習と記号の確認のために、定義と定理のみを以下に記載いたします。

線形相補性問題LCP(q,M)

所与のベクトルqRnと行列MRn×nに対して、以下の条件を満たすベクトルzRnを探す問題を線形相補性問題LCP(q,M)と呼ぶ。
w=q+Mzz,w0zw=0

Q行列

任意のqLCP(q,M)が解を持つとき、行列MをQ行列と呼ぶ。

相補行列Aπ

所与の行列Mと添え字π{0,1}nに対して、以下の条件を満たすベクトルaiRnを横に並べた行列Aπ=(a1,...,an)Rn×nを相補行列と呼ぶ。
ai={ei(πi=0)mi(πi=1)
ここで、ベクトルeiRni番目の要素が1の単位ベクトル、ベクトルmiRnは行列Mi番目の列ベクトルである。

相補錐Cπ

所与の行列Mと添え字π{0,1}nに対して、以下の条件を満たす集合を相補錐CπRnと呼ぶ。
Cπ={qRn:xRn,q=Aπx,x0}
また、任意の相補錐Cπの和集合を集合KRnとする。
K=π{0,1}nCπ
簡略化のため、Kも単に相補錐と呼ぶ。

相補錐とQ行列の関係

K=Rnであるとき、かつ、そのときのみ、行列MはQ行列である。

Q行列の判定方法

定理1より、行列MがQ行列であるかどうかは、K=Rnであるかどうかで判定できます。

これは、nが小さい場合(n=1,2,3)には、相補錐を図示することで確認できます。例として、以下の行列M1,M2R2×2の相補錐を図1に示します。行列M1は相補錐がRn全体を埋めているのでQ行列ですが、行列M2は相補錐が埋まっていない領域があるのでQ行列ではありません。

M1=(0.670.820.740.55),M2=(0.610.980.780.19)

!FORMULA[40][771003019][0]でのQ行列判定の例 n=2でのQ行列判定の例

一方で、nが大きい場合(n4)には、相補錐を図示することができません。したがって、同様の方法で確認することはできません。以降では、nが大きい場合にも適用できるQ行列の判定方法[2]を説明します。

方針としては、相補錐KRnであるかどうかを、その補集合K¯が空集合であるかどうかで判定します。K¯を補相補錐と呼ぶことにします。

ここで、補相補錐K¯は一般には非凸であり、これが空集合であるかを高速に判定できる方法は知られていません。そのため、補相補錐K¯を複数の凸集合に分割して、それぞれの集合が空集合であるかどうかを確認します。凸集合であれば、内点法や楕円体法などを用いて、空集合であるかを高速に判定できます。

補相補錐K¯を複数の凸集合に分割するために、定義式を変形していきます。まずは、元の相補錐Kの定義を再掲します。

K=πΠCπ

各相補錐Cπは以下のように半空間Hπ,i(i{1,...,n})の積集合としても表現できます。ここで、ベクトルhπ,iRnは行列Aπ1i番目の行ベクトルです。

Cπ=i{1,...,n}Hπ,iHπ,i={qRn:hπ,iq0}

ここで、相補錐が半空間の積集合として表現できるのは、相補錐が凸多面体であることに由来します。また、半空間を解析的に求められることは、相補錐がn次元空間上のn本のベクトルで生成される凸錐であることに由来します。詳細についての説明は省略させていただきます。

したがって、相補錐Kの定義式は以下のように変形できます。

K=π{0,1}ni{1,...,n}Hπ,i

このとき、その補集合K¯は以下となります。

K¯=π{0,1}ni{1,...,n}H¯π,i

最後に、テクニカルかつ本質的な変形になるのですが、和集合と積集合の分配法則を使うと、補相補錐K¯が凸多面体H¯σRn(σ{1,...,n}2n)の和集合になります。したがって、補相補錐K¯を複数の凸集合に分割できました。

K¯=σ{1,...,n}2nH¯σH¯σ=π{1,...,n}nH¯π,σπ

最後の変形をイメージしやすいように、n=2での例を以下に記載します。

K=(H(0,0),1H(0,0),2)(H(0,1),1H(0,1),2)(H(1,0),1H(1,0),2)(H(1,1),1H(1,1),2)

K¯=(H¯(0,0),0H¯(0,1),0H¯(1,0),0H¯(1,1),0)(H¯(0,0),0H¯(0,1),0H¯(1,0),0H¯(1,1),1)(H¯(0,0),0H¯(0,1),0H¯(1,0),1H¯(1,1),0)(H¯(0,0),0H¯(0,1),0H¯(1,0),1H¯(1,1),1)(H¯(0,0),0H¯(0,1),1H¯(1,0),0H¯(1,1),0)(H¯(0,0),0H¯(0,1),1H¯(1,0),0H¯(1,1),1)(H¯(0,0),0H¯(0,1),1H¯(1,0),1H¯(1,1),0)(H¯(0,0),0H¯(0,1),1H¯(1,0),1H¯(1,1),1)(H¯(0,0),1H¯(0,1),0H¯(1,0),0H¯(1,1),0)(H¯(0,0),1H¯(0,1),0H¯(1,0),0H¯(1,1),1)(H¯(0,0),1H¯(0,1),0H¯(1,0),1H¯(1,1),0)(H¯(0,0),1H¯(0,1),0H¯(1,0),1H¯(1,1),1)(H¯(0,0),1H¯(0,1),1H¯(1,0),0H¯(1,1),0)(H¯(0,0),1H¯(0,1),1H¯(1,0),0H¯(1,1),1)(H¯(0,0),1H¯(0,1),1H¯(1,0),1H¯(1,1),0)(H¯(0,0),1H¯(0,1),1H¯(1,0),1H¯(1,1),1)

以上より、任意のσ{1,...,n}2nに対して凸多面体H¯σが空集合であるかどうかを確認することで、行列MがQ行列であるかどうかを判定できます。

ここで、σにはn2n通りの組合せがありますので、高速な判定方法ではないことにご注意ください。

プログラム

上記の判定方法を実装したプログラムを ここ に置いておきます。is_q_matrixに判定したい行列を入力してください。また、show_complementary_coneで、n=2の場合に限り、相補錐の可視化もできます。

参考文献

[1]
Richard W. Cottle, Jong-Shi Pang, Richard E. Stone, The Linear Complementarity Problem, 2009
[2]
Katta G. Murty, Linear Complementarity, Linear and Nonlinear Programming, 1988
投稿日:202218
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。
バッチを贈って投稿者を応援しよう

バッチを贈ると投稿者に現金やAmazonのギフトカードが還元されます。

投稿者

seytwo
16
4985

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中
  1. はじめに
  2. 前提知識
  3. Q行列の判定方法
  4. プログラム
  5. 参考文献