为什么 CVXPY 用 cp.sqrt 抛出 DCP 错误,但用 cp.norm 没有错误

计算科学 Python 凸优化 简历
2021-12-08 05:50:15

我正在尝试使用 CVXPY 优化可见光通信 (VLC) 系统的信噪加干扰比 (SINR)。我的 SINR 约束之一为

hl,uTplγujL{l}(hj,uTpj)2+σu2.

如果我使用 cp.sqrt(A),其中 A 是平方根内的项,我的约束违反了 DCCP 规则,但是当我使用 cp.norm(A) 进行强制转换时,似乎没有违反。有人请向我澄清为什么会这样。我怀疑简单地采用 cp.norm(A) 是正确的。我刚刚开始学习如何使用 CVXPY,感谢任何帮助和指导。

1个回答

根据您的经验,其中之一(忽略下标)hp必须是变量。因此h'*p是仿射的。引入下标后,就可以按照CVXPY的DCP规则,形成这些单独的仿射项的向量范数,因为参数norm是仿射(向量)。cp.norm适当的向量是正确的,但不是cp.norm平方根的参数。

使用时norm,CVXPY 会将此约束识别为二阶锥约束,并相应地将其发送给求解器。

直接输入平方根违反了 DCP 规则,因为根据 DCP 规则,凸的凹(平方和的平方)是不允许的,因为对于任意凹函数和凸函数没有明确确定凸的凹曲率。