1

cvxpy に条件付き制約を設定する方法はありますか?私はこのような単純な凸ポートフォリオ最適化問題を見ています。

from cvxpy import *
import numpy as np

np.random.seed(1)
n = 10

Sigma = np.random.randn(n, n) 
Sigma = Sigma.T.dot(Sigma)
w = Variable(n)

mu = np.abs(np.random.randn(n, 1))
ret = mu.T*w

risk = quad_form(w, Sigma)

orig_w  = [0.15,0.2,0.2,0.2,0.2,0.05,0.0,0.0,0.0,0.0]

lambda_ret = Parameter(sign='positive')
lambda_ret = 5

lambda_risk = Parameter(sign='positive')
lambda_risk = 1

constraints = [sum_entries(w) == 1, w >= 0]

prob = Problem(Maximize(lambda_ret * ret - lambda_risk * risk ),constraints)

prob.solve()

特定のシナリオにのみ適用される制約を導入しようとしています

sum_entries([ w[i]-orig_w[i] if w[i]-orig_w[i] >= 0 else 0 for i in range(n)]) >= some threshold

この python 擬似コードでは、正の重みの変化のみを制御したいと考えています。

私は cvxpy 関数を調べましたが、それができるものは何もないようでした。

4

1 に答える 1