CVXPY error when trying to solve a convex minimization / binary programming problem(试图解决凸极小化/二进制规划问题时的CVXPY错误)
                            本文介绍了试图解决凸极小化/二进制规划问题时的CVXPY错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
                        
                        问题描述
我正在尝试解决我提交给QSE的一个问题,https://quant.stackexchange.com/questions/65680/find-k-of-n-assets-that-minimize-the-correlation-matrix/,但我在使用cvxpy库时遇到了一个问题。也就是说,我认为这是一个凸二进制规划问题,cvxpy的意思是;不遵循DCP规则。 我试图解决的问题是:从给定的10种风险资产中,找出相关性最小的5种资产。我目前解决这个问题的方法是
- 抓取每项资产的收益
 - 查找这些回报的相关矩阵
C - 将凸优化问题表示为
x是二进制向量x的条目总和为5C' = transpose(C * x) * x是一个矩阵,当i的第i项为0(否则不为零)时,i的第i行和第i列为零。注:我想知道这是否就是我的问题所在。这是我能想到的从关联矩阵C中删除与被拒绝资产对应的条目的最佳方法。- 最后,我想最小化
C'的平方和。这将为我提供一个由相关性最小的5种资产组成的投资组合。 
 
以下是我到目前为止拥有的非工作代码。
import pandas as pd
import pandas_datareader as web
import datetime as dt
import cvxpy as cvx
stocks = ['SHW', 'GOOG', 'AMZN', 'WMT', 'XOM', 'JNJ', 'UPS', 'AMT', 'AAPL', 'NEE']
start = dt.datetime(2015, 1, 1)
end = dt.datetime(2020, 1, 1)
d = web.DataReader(stocks, 'yahoo', start, end)['Adj Close']
corr = d.corr().to_numpy()
x = cvx.Variable(len(stocks), boolean=True)
cost = cvx.sum_squares((corr @ x).T @ x)
prob = cvx.Problem(cvx.Minimize(cost), [cvx.sum(x) == 5])
prob.solve(solver='ECOS_BB')
及其产生的错误
DCPError: Problem does not follow DCP rules. Specifically:
The objective is not DCP. Its following subexpressions are not:
# The corr array
我还尝试了一些不起作用的方法,包括
- 使用cvxp变量矩阵
X,该矩阵具有布尔和对称cvxpy属性。如果它是对称的,并且每行总和为5,那么我就有一个矩阵,我可以对其进行逐个元素的乘法,以求出C'。这不起作用,因为一个变量只允许有一个属性(奇怪的cvxpy限制)。 - 使用cvxp可变二进制矩阵
X和cvxp可变对称矩阵Y,并包括X == Y的约束(以绕过两个属性的限制)。我不记得为什么这个不起作用了。 
使用cvxp可变二进制矩阵 - 我还尝试使用非二进制cvxpy变量向量
x,并尝试将x的i值约束为0或1,但约束x[i] == 0 || x[i] == 1因||而无效--我也找不到cvxpy逻辑或条件。 
X,并限制每行的和为5且第1行等于第1列。我在这方面遇到了麻烦,因为测试X[i] == X[:i]会产生一个布尔数组,而我不知道如何用cvxpy来减少它。
- 确定这是否是cvxpy可以解决的问题。如果不是,我如何才能将其更改为从根本上解决我想要的问题?如果是cvxpy可以解决的问题
 - 如何处理当前代码以更正其问题?
 
感谢您抽出时间。
推荐答案
我认为C‘不是矩阵,而是标量:
transpose(C * x) * x = (Cx)'x=x'C'x=x'Cx
(我在这里用‘转置’),所以平方和没有多大意义?
您的问题是否只是基数约束的投资组合问题?
或精简:
  min x'Cx
  sum(x) = k
  x ∈ {0,1}
与x中的选定资产对应的C的行和列是您要查找的子矩阵。
这篇关于试图解决凸极小化/二进制规划问题时的CVXPY错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
				 沃梦达教程
				
			本文标题为:试图解决凸极小化/二进制规划问题时的CVXPY错误
				
        
 
            
        基础教程推荐
             猜你喜欢
        
	     - 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
 - 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
 - 修改列表中的数据帧不起作用 2022-01-01
 - Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
 - 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
 - 包装空间模型 2022-01-01
 - 在Python中从Azure BLOB存储中读取文件 2022-01-01
 - 求两个直方图的卷积 2022-01-01
 - PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
 - PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
 
    	
    	
    	
    	
    	
    	
    	
    	
				
				
				
				