如何修复数组的cvxpy输出?

时间:2019-05-31 13:44:49

标签: python cvxpy

我正在尝试使用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是值数组而不是数组数组,那将是可能的。如何解决此错误?

1 个答案:

答案 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