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]...]
我需要添加更多约束,例如 abs(list_final_weights-w)>0.005,但如果 w.value 是值数组而不是数组数组的形式,这将是可能的。我该如何解决这个错误?
解决方案
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
推荐阅读
- apache-kafka - JSONParseException 使用 Kafka REST API 读取数据
- mysql - 使用 CONCAT_WS 更新触发器后的 MySQL:为什么要在我不想要的地方插入换行符?
- compiler-errors - 这是D错误吗?(无法访问私有模板参数)
- shopify - Shopify api 变体选项标题在帖子上设置
- javascript - 使用 JavaScript。需要找到对称的顶点和轴
- python - 使用点符号扩展字典
- java - 使用 becker.jar 作为外部 jar 运行程序时如何修复 NullPointerException 错误?
- ios - NativeScript 找不到模块组件/主页
- android - YouTubePlayer 的 onClickListener
- javascript - .selectpicker('refresh') 不刷新 algolia 位置上的引导选择自动完成