過去に最適化を実行するためにPythonを使用しました。しかし、私は現在、目的関数の入力として行列を使用するとともに、個々の要素の値と行列の各行の値の合計に境界を設定しようとしています。問題が発生しています。 w
、p
、ret
- -マトリックスを入力、境界、制約として使用するscipy.optimizeでの問題
具体的には、私は目的関数にObjFunc
3つのパラメータを渡すしたいと思いますし、その後調整することにより、(技術的には、私は-1*ObjFunc
の値を最小化することにより機能を最大化しようとしています)この関数の値を最小化しますw
の値は、w
のすべての要素が[0,1]の範囲内になければならず、w
の各行の合計が1になるという制約があります。
私は、私が直面している問題を示すために、以下のコードを書いてください。ご覧のとおり、scipy.opimize
のminimize
機能を使用しています。問題は、目的関数の最初の行であるx = np.dot(p, w)
で始まります。この最適化手順では、行列を1次元ベクトルに平坦化しようとします。最適化を実行せずに関数を呼び出すと発生しない問題です。 bounds = b
とconstraints = c
にもエラーが発生しています。
私はこの最適化にどのように近づいているのかについて基本的な間違いを犯していることを知っており、提供できる洞察力に感謝します。
import numpy as np
from scipy.optimize import minimize
def objFunc(w, p, ret):
x = np.dot(p, w)
y = np.multiply(x, ret)
z = np.sum(y, axis=1)
r = z.mean()
s = z.std()
ratio = r/s
return -1 * ratio
# CREATE MATRICES
# returns, ret, of each of the three assets in the 5 periods
ret = np.matrix([[0.10, 0.05, -0.03], [0.05, 0.05, 0.50], [0.01, 0.05, -0.10], [0.01, 0.05, 0.40], [1.00, 0.05, -0.20]])
# probability, p, of being in each stae {X, Y, Z} in each of the 5 periods
p = np.matrix([[0,0.5,0.5], [0,0.6,0.4], [0.2,0.4,0.4], [0.3,0.3,0.4], [1,0,0]])
# initial equal weights, w
w = np.matrix([[0.33333,0.33333,0.33333],[0.33333,0.33333,0.33333],[0.33333,0.33333,0.33333]])
# OPTIMIZATION
b = [(0, 1)]
c = ({'type': 'eq', 'fun': lambda w_: np.sum(w, 1) - 1})
result = minimize(objFunc, w, (p, ret), method = 'SLSQP', bounds = b, constraints = c)
ありがとうございました。それは私が起こったと思ったものですが、そうではないことを望んでいました。あなたは私の懸念を確認しました。とても有難い。 – user180V