如何在 CVXPY 中设置半正参数(矩阵)?
How to set a semi-positive Parameter(matrix) in CVXPY?
我想使用热启动来检查设置 cvx.Parameter 是否有性能优势,而我遇到了这个:
cvxpy.error.DCPError: Problem does not follow DCP rules.
我的代码在这里:
import time
import numpy as np
import cvxpy as cvx
m = 300
x = cvx.Variable((m, 1))
p_cov = cvx.Parameter((m, m))
prob = cvx.Problem(cvx.Maximize(-cvx.quad_form(x, p_cov)), [x>=0, cvx.sum(x)==1])
for _ in range(10):
df_return = np.random.randn(m, m+1)
cov = np.cov(df_return)
p_cov.value = cov
t1 = time.time()
prob.solve(warm_start=True)
t2 = time.time()
print("Solve time:", round(t2-t1, 2))
我觉得重点是p_cov应该是半正矩阵,但是我就是解不出来。期待您的帮助,谢谢!
你说得对!你只需要告诉 cvxpy p_cov
是半正定的。
p_cov = cvx.Parameter((m, m), PSD=True)
DCP 现在可以计算出这个表达式的正确性质:
cvx.quad_form(x, p_cov)
即:
Expression(CONVEX, NONNEGATIVE, (1, 1))
而不是:
Expression(UNKNOWN, UNKNOWN, (1, 1))
在 Advanced Features 中查找更多文档。
我想使用热启动来检查设置 cvx.Parameter 是否有性能优势,而我遇到了这个:
cvxpy.error.DCPError: Problem does not follow DCP rules.
我的代码在这里:
import time
import numpy as np
import cvxpy as cvx
m = 300
x = cvx.Variable((m, 1))
p_cov = cvx.Parameter((m, m))
prob = cvx.Problem(cvx.Maximize(-cvx.quad_form(x, p_cov)), [x>=0, cvx.sum(x)==1])
for _ in range(10):
df_return = np.random.randn(m, m+1)
cov = np.cov(df_return)
p_cov.value = cov
t1 = time.time()
prob.solve(warm_start=True)
t2 = time.time()
print("Solve time:", round(t2-t1, 2))
我觉得重点是p_cov应该是半正矩阵,但是我就是解不出来。期待您的帮助,谢谢!
你说得对!你只需要告诉 cvxpy p_cov
是半正定的。
p_cov = cvx.Parameter((m, m), PSD=True)
DCP 现在可以计算出这个表达式的正确性质:
cvx.quad_form(x, p_cov)
即:
Expression(CONVEX, NONNEGATIVE, (1, 1))
而不是:
Expression(UNKNOWN, UNKNOWN, (1, 1))
在 Advanced Features 中查找更多文档。