凸最適化問題
凸最適化問題の例として、以下の問題を取り上げます:
問題:
2つの変数xとyに対して、次の目的関数を最小化するようなxとyの値を求める。
🔹$ f(x, y) = (x-1)^2 + 4(y+2)^2 $
制約条件:
🔹$ x + y \geqq 3 $
解法
この問題をCVXPYを使用して解いてみましょう。
まず、CVXPYをインポートします。
1 | import cvxpy as cp |
次に、変数xとyを定義します。
1 | x = cp.Variable() |
目的関数と制約条件を定義します。
1 | objective = cp.Minimize((x-1)**2 + 4*(y+2)**2) |
最後に、最適化問題を定義し、解を求めます。
1 | problem = cp.Problem(objective, constraints) |
最適な解が得られました。
最小値を目的関数の値として取得できます。
1 | optimal_value = problem.value |
また、最適なxとyの値も取得できます。
1 | optimal_x = x.value |
以上が、凸最適化問題をCVXPYで解くためのコードです。
全ソースコードは以下のようになります。
1 | import cvxpy as cp |
結果表示
上記のコードを実行すると、最小値や最適なxとyの値が表示されます。
[実行結果]
1 | Optimal value: 12.800000000000002 |
“Optimal value”は最小化したい目的関数の最小値を示しています。
また、”Optimal x”と”Optimal y”は最適な変数xとyの値を示しています。
最適なxの値は4.2、最適なyの値は-1.2となったことが分かります。