我有一个目标函数,使用var-covariance矩阵和加权向量找到标准差。
In [388]: equal_weights
Out[388]:
array([ 3.57142857, 3.57142857, 3.57142857, 3.57142857, 3.57142857,
3.57142857, 3.57142857, 3.57142857, 3.57142857, 3.57142857,
3.57142857, 3.57142857, 3.57142857, 3.57142857, 3.57142857,
3.57142857, 3.57142857, 3.57142857, 3.57142857, 3.57142857,
3.57142857, 3.57142857, 3.57142857, 3.57142857, 3.57142857,
3.57142857, 3.57142857, 3.57142857])
我有形状为28,28的var-cov矩阵
var_cov_matrix
Out[389]:
array([[ 6.71849405e-04, 1.07026673e-04, 6.79182814e-04,
5.92496081e-04, 6.76905450e-04, 5.68079259e-04,
2.22977933e-04, 6.27305383e-04, 1.93215258e-04,
7.58978339e-04, 6.04280523e-04, 6.76028095e-04,
5.56815379e-04, 7.24121343e-04, 1.29104023e-04,
5.65809917e-04, 2.21988437e-04, 7.96973235e-05,
6.22684153e-04, 7.24716154e-04, 7.34006960e-04,
8.06120887e-04, 7.00056878e-04, 6.61041132e-04,
1.43439814e-04, 2.27692364e-04, 4.44174103e-04,
4.52772521e-04],
[ 1.07026673e-04,......]]
我必须通过运行纸浆优化器找到优化的重量。目标函数是,
math.sqrt((eq_wt_vector.transpose() @ var_cov_matrix) @ eq_wt_vector)
目标是通过约束
最小化上述函数生成的值sum(equal_weights) - 1 == 0
我经历了很多例子,解决方案可用于线性方程。非常感谢这个特定问题的解决方案。感谢。
答案 0 :(得分:0)
感谢@Rodrigo de Azevedo提示。 是的,我能够使用cvxpy包解决问题。使用cvxpy库有各种条件,如下所示,
解决方案如下,
Obj功能:
(eq_wt_vector.transpose() @ var_cov_matrix) @ eq_wt_vector
在DCP中表示为
Minimize(quad_form(a, b))
其中quad(a,b)= a.T * b * a
解决方案:
from cvxpy import Variable,Problem,Minimize,sum_entries,quad_form
a = Variable(var_cov_matrix.shape[0]) #vector of column length = matrix length
b = np.matrix(var_cov_matrix)
objective = Minimize(quad_form(a, b))
constraints = [sum_entries(a) == 100, 0<=a, a<=100] #constraints for vector - sum of elements = 100, lies between 0,100
prob = Problem(objective, constraints)
optimized_deviation = prob.solve()