凸最適化問題 CVXPY

凸最適化問題

凸最適化問題の例として、以下の問題を取り上げます:

問題:

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
2
x = cp.Variable()
y = cp.Variable()

目的関数と制約条件を定義します。

1
2
objective = cp.Minimize((x-1)**2 + 4*(y+2)**2)
constraints = [x + y >= 3]

最後に、最適化問題を定義し、解を求めます。

1
2
problem = cp.Problem(objective, constraints)
problem.solve()

最適な解が得られました。

最小値を目的関数の値として取得できます。

1
optimal_value = problem.value

また、最適なxとyの値も取得できます。

1
2
optimal_x = x.value
optimal_y = y.value

以上が、凸最適化問題をCVXPYで解くためのコードです。


全ソースコードは以下のようになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import cvxpy as cp

x = cp.Variable()
y = cp.Variable()

objective = cp.Minimize((x-1)**2 + 4*(y+2)**2)
constraints = [x + y >= 3]

problem = cp.Problem(objective, constraints)
problem.solve()

optimal_value = problem.value
optimal_x = x.value
optimal_y = y.value

print("Optimal value:", optimal_value)
print("Optimal x:", optimal_x)
print("Optimal y:", optimal_y)

結果表示

上記のコードを実行すると、最小値や最適なxとyの値が表示されます。

[実行結果]
1
2
3
Optimal value: 12.800000000000002
Optimal x: 4.2
Optimal y: -1.2

“Optimal value”は最小化したい目的関数の最小値を示しています。

また、”Optimal x”と”Optimal y”は最適な変数xとyの値を示しています。

最適なxの値は4.2、最適なyの値は-1.2となったことが分かります。