我正在尝试使用cvxpy编写投资组合优化问题。
initial_weights = [0.045, 0.035, 0.024, 0.028...]
rets = (np.log(data/data.shift(1))
w = cvx.Variable(38)
ret = np.sum(rets.mean()*w)*252
prob = cvx.Problem(cvx.Maximize(ret), [cvx.sum_entries(w)==1, w>0.02, w<0.06])
结果= prob.solve() 求解后,w.value的格式为[[0.02],[0.02],[0.04] ...]
我需要添加更多的约束,例如abs(list_final_weights-w)> 0.005,但是如果w.value是值数组而不是数组数组,那将是可能的。如何解决此错误?
答案 0 :(得分:0)
cvxpy
进行元素逐减运算,只要它们的形状相同即可。您可以将平面数组转换为求解器所需的适当形状-在这种情况下,它是(N,1)而不是形状(N,)的平面数组。
list_final_weights = np.reshape(list_final_weights, [len(list_final_weights), 1])
然后您应该可以对约束进行减法运算
list_final_weights - w >= 0.005
此外,cvxpy
不允许出现严重的>
或<
不等式。仅<=
和>=
。
https://www.cvxpy.org/tutorial/intro/index.html#constraints