制約付き最小化問題 SciPy

制約付き最小化問題(Constrained Minimization Problem)

制約付き最小化問題(Constrained Minimization Problem)は、最小化したい目的関数の下で、特定の制約条件を満たす変数の最適解を求める問題です

例題

制約付き最小化問題(Constrained Minimization Problem)の例題として、目的関数と制約条件を設定したコードを表します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from scipy.optimize import minimize

# 目的関数
def objective(x):
return x[0]**2 + x[1]**2 # 最小化したい関数(例: x^2 + y^2)

# 制約条件
def constraint(x):
return x[0] + x[1] - 1 # 制約条件(例: x + y <= 1)

# 初期値
x0 = [0, 0] # 初期値の設定

# 制約付き最小化問題を解く
result = minimize(objective, x0, constraints={'type': 'ineq', 'fun': constraint})

# 結果を表示
print("最適解:", result.x)
print("最適な目的関数値:", result.fun)

この例では、2変数の目的関数 objective と制約条件 constraint を定義しています。

目的関数は最小化したい関数(ここでは $ x^2 + y^2 $)を示しており、制約条件は $x + y \leqq 1$ のような形式で設定しています。


minimize 関数を使用して、目的関数と制約条件を引数として渡しています。

制約条件は constraints パラメータに辞書型として渡されており、'type' には制約の種類(この例では不等式制約 'ineq')を、'fun' には制約条件の関数を指定しています。


最適化の結果は result に格納され、result.x に最適解の変数の値が、result.fun に最適な目的関数値が返されます。これらを表示しています。

実行結果

上記のコードを実行すると下記のような結果が表示されます。

[実行結果]
最適解: [0.5 0.5]
最適な目的関数値: 0.5000000000000002

この結果は、制約付き最小化問題の最適解と最適な目的関数値を示しています。

🔹最適解: [0.5, 0.5]
 この結果は、最適解の変数の値を示しています。
 ここでは、x の値が 0.5、y の値が 0.5 であることを意味します。
 この値は、制約条件 $x + y \leqq 1$ を満たす中で、目的関数 $x^2 + y^2$ を最小化するための最適な値です。

🔹最適な目的関数値: 0.5000000000000002
 この結果は、最適な目的関数の値を示しています。
 ここでは、目的関数 $ x^2 + y^2 $ の最小値が $0.5$ であることを示しています。
 ただし、浮動小数点数の誤差があるため、表示された値は正確な最小値ではありません。
 厳密な結果は result.fun の値として得られます。

この結果から、与えられた目的関数 $ x^2 + y^2 $ を最小化するための最適解は、$x = 0.5$ および $y = 0.5$ であり、そのときの最適な目的関数値は約 $0.5$ であることがわかります。