0
の不等式条件指定された変数を最小限に抑えるためにscipyのダウンロードを使用して、私は次の目的関数を最小化したいと思います:実験として、他の変数
W1およびW2のパラメータはラムダで囲まれています。
制約は次のとおりです。
私はこのような多変量ケースを最適化する方法についてのまともなscipyのダウンロードの例を発見していません。誰かがこの問題についての指針を貸すことができたら、私はそれを感謝します。
の不等式条件指定された変数を最小限に抑えるためにscipyのダウンロードを使用して、私は次の目的関数を最小化したいと思います:実験として、他の変数
W1およびW2のパラメータはラムダで囲まれています。
制約は次のとおりです。
私はこのような多変量ケースを最適化する方法についてのまともなscipyのダウンロードの例を発見していません。誰かがこの問題についての指針を貸すことができたら、私はそれを感謝します。
コード:
import numpy as np
from scipy.optimize import minimize
def fun(x):
return np.sum(x[2:])
x0 = np.zeros(4) # lambda1, lambda 2, w1, w2
cons = ({'type': 'ineq', 'fun': lambda x: x[2] - 2 + 10 * x[0] + 3 * x[1]},
{'type': 'ineq', 'fun': lambda x: x[3] - 2 + 5 * x[0] + 5 * x[1]},
{'type': 'ineq', 'fun': lambda x: x[2]},
{'type': 'ineq', 'fun': lambda x: x[3]},
{'type': 'eq', 'fun': lambda x: x[0] + x[1] - 1})
res = minimize(fun, x0, constraints=cons)
print(res)
print(np.round(res.x, 2))
出力:
fun: -3.3306690738754696e-16
jac: array([ 0., 0., 1., 1.])
message: 'Optimization terminated successfully.'
nfev: 7
nit: 1
njev: 1
status: 0
success: True
x: array([ 5.00000000e-01, 5.00000000e-01, -3.33066907e-16,
0.00000000e+00])
[ 0.5 0.5 -0. 0. ]
これだけthe official docsからの情報を使用して、基本的です。
編集ここでは一般的な最適化機能を使用しましたが、これはLPですので、おそらくscipy.optimize.linprogを使用してください。
私はそれをチェックしませんでしたが、linprogは使用頻度がややようになります。
from scipy.optimize import linprog
c = [0, 0, 1, 1]
A = [[-10, -3, -1, 0], [-5, -5, 0, -1]]
b = [-2, -2]
A_eq = [[1, 1, 0, 0]]
b_eq = [1]
x0_bnds = (-np.inf, -np.inf, 0, 0)
x1_bnds = (np.inf, np.inf, np.inf, np.inf)
res = linprog(c, A, b, A_eq, b_eq, bounds=list(zip(x0_bnds, x1_bnds)))
print(res)
出力:
fun: -0.0
message: 'Optimization terminated successfully.'
nit: 4
slack: array([ 0., 3.])
status: 0
success: True
x: array([-0.14285714, 1.14285714, 0. , 0. ])
グレートソリューション。これありがとう。 – MLhacker