thisスレッドで提案されている最適化問題を解決したい。さて、私はx[1]...x[n]
を解決するだけでなく、変数yも解決したいと思います。インデックス作成に何か問題があるようです。複数の変数を最適化するラムダ関数のインデックス付け
from sympy import Sum, symbols, Indexed, lambdify
from scipy.optimize import minimize
import numpy as np
def _eqn(y, variables, periods, sign=-1.0):
x, i = symbols("x i")
n = periods-1
s = Sum(Indexed('x', i)/(1+0.06)**i, (i, 1, n))
f = lambdify(x, s, modules=['sympy'])
return float(sign*(y + f(variables)))
z = 3
results = minimize(lambda xy: _eqn(xy[0], xy[1:z], z),np.zeros(z))
print(results.x)
[OK]をクリックします。それは(i + 1)でなければなりません。ですから、私はx [0]とx [1]を変数として持つようになりました。最小化関数でのインデックス作成は本当に正しいですか? _eqn内のyと変数を変更すると仮定すると、最小値(λxy:_eqn(xy [:z-1]、xy [z-1]、z)、np.zeros(z)インデックスが合計変数に一致するためです。そのような場合に逸脱した結果をどういうふうに確認することはできますか? – Peterhack
インデックス作成が正しいようです。 '_eqn'関数の中で' x [0] 'と' x [1] 'は' variables [0] 'と' variables [1] 'を参照しています。これらは' xy [1] 'と' xy [ 2]。すでに関数 '_eqn'の入力引数' y'に 'xy [0]'を分けています。 –
ええ、私は私が従うことができると思います。しかし、なぜ(i + 1で)結果とあなたの最初の答えが異なるのですか?これは本当に影響がありますか? 'x = [var( 'x' + str(i))for range(z)]' – Peterhack