首页 > 解决方案 > 如何修复数组的 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])

result = prob.solve() 求解后 w.value 的形式为 [[0.02], [0.02], [0.04]...]

我需要添加更多约束,例如 abs(list_final_weights-w)>0.005,但如果 w.value 是值数组而不是数组数组的形式,这将是可能的。我该如何解决这个错误?

标签: pythoncvxpy

解决方案


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


推荐阅读