如何在cvxpy中编写复杂的约束?

时间:2019-05-30 14:58:16

标签: 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])
result = prob.solve()

求解后,w.value的形式为[[0.02],[0.02],[0.04] ...]

我想添加一个约束,其工作原理如下:

for i in range(len(initial_weights)):
    abs(initial_weights[i]-w[1][i])>0.005 

有人对如何将其包括在约束中有任何建议吗?

1 个答案:

答案 0 :(得分:0)

如果要在for循环中添加约束,此answer似乎提供了解决方案。

令我惊讶的是,返回的值是一个数组数组,而不是值数组。如果确保rets.mean()的维数正确,则w应该是具有38个值的简单数组。在这种情况下,您的约束简化为 abs(initial_weights-w)>0.005