ChunPom’s diary

数学、物理、機械学習に関する話題。あと院試、資格、大学入試まで。

しっかり学ぶ数理最適化の演習解説ー2.7:相補性定理と、その応用

 線形計画法において、主問題とその双対問題が実質的に等しい値を持つことが強双対定理により要請される。では、値ではなく最適解同士にはどういう関係があるのだろうか?以下の相補性定理がそれに対するアンサーとなる。

 

・相補性定理

以下、{\displaystyle A \in R^{m \times n}, \boldsymbol{b} \in R^{m}, \boldsymbol{c} \in R^{n}, \boldsymbol{x} \in R^{n}, \boldsymbol{y} \in R^{m}}とし、{\displaystyle n \gt m}かつ{\displaystyle A}の全ての行ベクトルが一次独立であるとする。

主問題を

{\displaystyle max_{\boldsymbol{x}} \ \  \boldsymbol{c}^{T} \boldsymbol{x}  \ \  s.t.\ A \boldsymbol{x}=\boldsymbol{b}, \boldsymbol{x} \geq \boldsymbol{0}}

とし、その双対問題を

{\displaystyle min_{\boldsymbol{y}} \ \  \boldsymbol{b}^{T} \boldsymbol{y}  \ \  s.t.\ A^{T} \boldsymbol{y} \geq \boldsymbol{c}}

とする。このとき、それぞれの実行可能解{\displaystyle \boldsymbol{x},\boldsymbol{y}}がともに最適解であるための必要十分条件は、

{\displaystyle x_j (\sum^m_{i=1} a_{ij} y_i -c_j)=0, \ \ j=1,...,n }

が成り立つことである。この条件を相補性条件と呼ぶ。

 

・応用事例として 

 これを用いて問題を解いてみよう(自己流の解き方のため間違っていたらご容赦ください)。例えば、「しっかり学ぶ数理最適化」の演習2.7は下記のような問題である。

{\displaystyle max_{\boldsymbol{x}} \ \  \boldsymbol{c}^{T} \boldsymbol{x}  \ \  s.t.\ \boldsymbol{a}^{T} \boldsymbol{x}=b, \boldsymbol{x} \geq \boldsymbol{0}}

ただし、{\displaystyle  \boldsymbol{a}, \boldsymbol{c} \geq \boldsymbol{0}, b \gt 0 }とする。

 

 まず{\displaystyle n=1}の場合は、明らかに{\displaystyle x_1=b/a_1}が最適解で、値{\displaystyle b_1 c_1/a_1}をとる。

 次に、{\displaystyle n \gt 1}の場合を考える。まず相補性定理が使えるかを吟味する。行列{\displaystyle A}はベクトル{\displaystyle \boldsymbol{a}=(a_1,a_2,..,a_n)}となり一行のみの行列となるので、明らかに一次独立となる。また、制約の数も{\displaystyle m=1}なので{\displaystyle n \gt m}を満たしているため、相補性定理が適用できる。

 演習2.7の主問題は制約が1つのみであるため双対問題の方が解きやすいはずである。双対問題は

{\displaystyle min_{\boldsymbol{y}} \ \  by \ \  s.t.\ y \boldsymbol{a} \geq \boldsymbol{c}}

であり、制約条件を整理すると{\displaystyle y \geq max_j c_j/a_j}となるため、この問題の最適解は{\displaystyle y=max_j\  c_j/a_j}で、値{\displaystyle b \cdot max_j \ c_j/a_j}をとる。

相補性定理により、主問題の実行可能解{\displaystyle \boldsymbol{x}}が最適解であることは、すべての{\displaystyle j}に対して{\displaystyle x_j (y -c_j/a_j)=0}が成り立つことと同値である。今、{\displaystyle y=max_j \ c_j/a_j}であるため、{\displaystyle c_j / a_j}を最大化する{\displaystyle j}の集合を{\displaystyle J}で定義すると、相補性条件は

{\displaystyle x_j=0 \ (j \notin J)}

と等価になる。従って、これを満たし、かつ実行可能となるため制約{\displaystyle \boldsymbol{a}^T\boldsymbol{x} =b}を満たすような解が最適解となる。

以上より、主問題の最適解は{\displaystyle x_j=0 \ (j \notin J)}かつ{\displaystyle  \sum_{j \in J} a_j x_j =b}なる任意の解{\displaystyle \boldsymbol{x}}であって、このとき値{\displaystyle b \cdot max_j \ c_j/a_j}をとる({\displaystyle n=1}の結果もこれに含めることができる)。

 

なお上記の最適解は、{\displaystyle J}の要素が1つのみの場合は1つに限られる。すなわち、その要素を{\displaystyle j^*}として最適解は{\displaystyle x_{j^*}=b/a_{j^*}, x_{j\neq j^*}=0}に一意に決まる。{\displaystyle J}の要素が2つ以上の場合は最適解は無数に存在する。

 

 相補性定理の証明は下記の参考書を参照されたい。また、上記では等式制約の主問題を考えたが、不等式制約の場合の相補性条件についても参考書では述べられている。