【发布时间】:2021-06-07 15:04:08
【问题描述】:
我正在使用CVXR 建模包来解决凸优化问题。我确定问题是凸的并且它遵循 DCP 规则,但是如果我使用 CVXR 检查 DCP 规则,它会返回 False。但是,如果我遇到完全相同的问题并使用CVXPY 进行检查,它会返回True(如预期的那样)
这里发生了什么?我附上了 R 和 Python 中这种行为的最小可重现示例:
R 代码使用CVXR
library(splines2)
library(CVXR)
deriv_basis = splines2::dbs(seq(0, 1, length.out=100), degree=3, intercept=T, df=30, derivs=2)
R = t(deriv_basis) %*% deriv_basis
beta_var = CVXR::::Variable(nrow(R))
q = CVXR::quad_form(beta_var, R)
CVXR::is_dcp(q)
[1] FALSE
write.table(x=R, file='R.csv'), row.names=F, sep=';')
使用CVXPY的Python代码
import cvxpy
import pandas as pd
R = pd.read_csv('R.csv', sep=';').values
beta_var = cvxpy.Variable(R.shape[1])
q = cvxpy.quad_form(beta_var, R)
q.is_dcp()
Out[1]: True
谁能解释这里发生了什么以及如何解决它,以便我可以使用 CVXR?
【问题讨论】: