数学やプログラミングの備忘録

数理最適化, Python, C++をメインに紹介するブログ。

MENU

制約無し凸二次計画問題を手計算で解く例題

今日は、制約無し凸二次計画問題(最適化問題)を手計算で解いてみます。

制約無し凸二次計画問題って何?という方や解法の手順を詳しく知りたい人は、下記の記事を参考にしてください。

www.letsopt.com

目次

例題


\begin{array}{ll}
\min_{x} & 2x^2 + y^2 + x y + x + y\\
\text{s.t.} & x \in \mathbb{R}^n
\end{array}

変数として  x, y の二つを持つ最適化問題です。

手計算で解く

まず、目的関数をを  f(x) とし、行列とベクトルで表します。


\begin{align}
f(x) &= 2x^2 + y^2 + x y + x + y\\
&= (\begin{array}{cc}
x & y
\end{array})
\left(
\begin{array}{cc}
2 & 0.5\\
0.5 & 1
\end{array}
\right)
\left(\begin{array}{c}
x\\
y
\end{array}\right)
+ (\begin{array}{cc}
1 & 1
\end{array})
\left(\begin{array}{c}
x\\
y
\end{array}\right)
\end{align}

目的関数が凸関数であるとき(係数行列が半正値対称行列であるとき)、例題の最適解を求めるには、次の連立方程式を解きます(解法の詳細な説明はこちら)。


2
\left(
\begin{array}{cc}
2 & 0.5\\
0.5 & 1
\end{array}
\right)
\left(\begin{array}{c}
x\\
y
\end{array}\right)
=
-\left(\begin{array}{c}
1\\
1
\end{array}\right)

見やすく書き直します。


\begin{cases}
4 x + y = -1 \\
x + 2 y = -1
\end{cases}

これを解くと、


x = -1/7,\ y = -3/7

となり、最適解を求めることができました。

ちなみに、最適値は次のように計算できます。


(最適値)=
\frac{1}{2}(\begin{array}{cc}
1 & 1
\end{array})
\left(\begin{array}{c}
-1/7\\
-3/7
\end{array}\right)
= - \frac{2}{7}

代入しても計算できますが、こっちの方が早いです。

雰囲気は掴めたでしょうか。次回は、今回の例題をpythonのライブラリを使って解いてみます。