1
期待通りに制約が働いていない私は2つの制約との株式ポートフォリオのボラティリティの最小化をやってる:株価重みののPython scipyのダウンロードオプティマイザ:
- 合計は= 1でなければならない、これは正常に動作します。
- 二乗重みの合計は0.02未満でなければなりません。これはポートフォリオに少なくとも50の株式を保有するために行われます。組成に十分な株式があります(約100)ので、これを満たす問題はありません制約。
ただし、2番目の制約は何らかの理由で機能しません。誰かが私にこの境界を正しく設定する方法を教えてもらえますか?
import scipy.optimize as spo
def portfolio_vol(w):
#compute porfolio volatility
portfolio_volatility = np.sqrt(w.T.dot(cov_matrix).dot(w))
return portfolio_volatility
def find_optimal_allocations():
bnds = tuple((0.00, 0.02) for x in weights)
cons = ({'type': 'eq', 'fun': lambda x: 1 - sum(x)}, {'type': 'ineq', 'fun': lambda x: sum(x**2) - 0.02})
result = spo.minimize(portfolio_vol, weights, method='SLSQP', bounds = bnds, constraints = cons)
return result.x
あなたの不等式制約が正しく定義されていません。参照:http://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.optimize.minimize.html - ブール値ではなく、 'g_i(x)'を指定する必要があります。 – cel
どうすればよいですか?制約が「>」または「<」の形である例は見つかりません –
2番目の制約をこの合計(x ** 2)-0.02に変更することでわかりましたが、それでも正しく動作しない場合、@celはあなたがそれを修正する方法を提案できますか? –