JP / EN

Linear Complementarity Problem

線形相補性問題

1. 線形相補性問題(LCP)とは

物理シミュレーションの衝突判定(剛体は互いにめり込まない)や、経済学の市場均衡などで現れる、以下の条件を満たすベクトル $w, z$ を求める問題を線形相補性問題(LCP)と呼びます。

\[ \begin{cases} w - Mz = q & (\text{線形方程式}) \\ w \ge 0, \quad z \ge 0 & (\text{非負条件}) \\ w^T z = 0 & (\text{相補性条件}) \end{cases} \]

最後の「相補性条件 ($w^T z = 0$)」と「非負条件」の組み合わせは、要素ごとに見れば「$w_i$ と $z_i$ の少なくとも片方は必ず $0$ でなければならず、かつ両方ともマイナスになってはいけない」という、一種のスイッチング動作を意味します。

2. 一般的な解法と今回のアプローチ

LCPは古くから研究されており、解くための専用アルゴリズムがいくつか確立されています。

  • ピボット法(レムケ法など): 単体法のように変数を入れ替えながら解を探す手法。
  • 内点法: 実行可能領域の内部を通って最適解に収束させる手法。

しかし今回は、これらの専用ソルバーを使わず、より汎用的な「ニュートン法」や「ホモトピー法」を用いて解くことに挑戦します。

そのためには、不等式($\ge 0$)を含むこの問題を、これら強力なソルバーが扱える「非線形方程式($=0$)」の形に帰着させる必要があります。

3. 非線形方程式への帰着:NCP関数

「非負かつ相補的($a \ge 0, b \ge 0, ab=0$)」という条件を、一本の等式 $\phi(a, b) = 0$ で表現できる関数のことをNCP関数と呼びます。

代表的な2つのNCP関数を紹介します。

A. Min関数(絶対値の利用)

最も直感的なのは、「小さい方が0であればよい」という考え方です。

\[ \phi_{\min}(a, b) = \min(a, b) = a + b - \sqrt{(a - b)^2} = 0 \]

どちらかが負なら $\min$ は負になり、両方正なら $\min$ は正になります。「片方が0、もう片方が正(または0)」の時だけ0になるため、LCPの条件と等価です。

特徴: 直感的ですが、絶対値を含むため $a=b$ のラインでグラフが折れ曲がり(微分不可能)、ニュートン法の収束が悪くなる欠点があります。

B. Fischer-Burmeister関数(今回の主役)

そこで、絶対値の代わりに滑らかな曲線を持つFischer-Burmeister(フィッシャー・ブルマイスター)関数を採用します。

\[ \phi_{FB}(a, b) = \sqrt{a^2 + b^2} - (a + b) = 0 \]

なぜ置き換えられるのか?(等価性の証明)

式を変形して2乗してみます。

$\sqrt{a^2 + b^2} = a + b$
$\implies (a^2 + b^2) = (a + b)^2 = a^2 + 2ab + b^2$
$\implies 0 = 2ab \iff ab = 0$

これにより「積が0(少なくとも片方は0)」が導かれます。また、元の式の左辺(ルート)は非負なので、右辺 $a+b$ も非負でなければならず、積が0という条件と合わせると必然的に $a, b \ge 0$ となります。

特徴: 原点以外で滑らか(微分可能)であり、ニュートン法との相性が非常に良いため、今回はこちらを使用します。

4. 方程式の定式化

上記のFB関数 $\phi_{FB}$ を、ベクトルの各要素 $(w_i, z_i)$ に適用します。

さらに、$w = Mz + q$ の関係式を代入して $w$ を消去すれば、$z$ だけの未知数を持つ連立非線形方程式を作ることができます。

\[ F(z) = \begin{pmatrix} \phi_{FB}((Mz+q)_1, z_1) \\ \vdots \\ \phi_{FB}((Mz+q)_n, z_n) \end{pmatrix} = \mathbf{0} \]

これで、LCPは単なる「$F(z)=0$ を解く問題」に帰着されました。

5. 解析結果

シンプルな2次元の例題として、以下のパラメータを設定しました。

\[ M = \begin{pmatrix} -1 & 0 \\ 0 & -1 \end{pmatrix}, \quad q = \begin{pmatrix} 1 \\ 1 \end{pmatrix} \]

この場合、線形関係式 $w = Mz + q$ は $w_i = -z_i + 1$、つまり $w = 1 - z$ となります。

これを Fischer-Burmeister 関数 $\phi_{FB}(w, z) = \sqrt{w^2 + z^2} - (w + z) = 0$ に代入すると、実際に解くべき方程式は以下のようになります。

\[ \begin{cases} \sqrt{(1-z_1)^2 + z_1^2} - 1 = 0 \\ \sqrt{(1-z_2)^2 + z_2^2} - 1 = 0 \end{cases} \]

※ $(1-z_i) + z_i = 1$ となるため、式が非常にシンプルになります。

この方程式には、以下の4つの解が存在します。

ニュートン法とホモトピー法で、これら全てを発見できるかを検証します。なお、今回はSPICE指向型解析法で解析を行いました。

  • ① $z = (0, 0)^T$
  • ② $z = (1, 1)^T$
  • ③ $z = (0, 1)^T$
  • ④ $z = (1, 0)^T$

結果 1:ニュートン法による収束

初期値を変えてニュートン法を適用した際の収束の様子です。

LCP Newton Result - Spatial Distribution

図1:ニュートン法の収束結果

結果 2:ホモトピー法による解の探索

ニュートンホモトピー法を用いて、パラメータ変化に伴う解の軌跡を追跡した結果です。初期値を帰れば別の解に収束し全部の解を見つけられますが、一回の解析で全解を求めることはできませんでした。

LCP Newton Result - Spatial Distribution

図2:ホモトピーパスの軌跡($z_1$)

LCP Newton Result - Spatial Distribution

図3:ホモトピーパスの軌跡($z_2$)