如何对 CVXPY 中两列的内积创建不等式约束?

Cre*_*tor 5 python mathematical-optimization convex-optimization python-2.7 cvxpy

假设我的约束是矩阵变量的第一列和第三列的乘积大于一。如何在 CVXPY 中实施?例子:

w = Variable(4,3) 
Run Code Online (Sandbox Code Playgroud)

在 Matlab 中,我的约束是:

w(:,1)'*w(:,3)>1
Run Code Online (Sandbox Code Playgroud)

我如何在 CVXPY 中实现它?或者我们可以在 CVXPY 下执行点积吗?numpy.dotCVXPY 不支持。

dav*_*-cz 3

不可能将两个变量相乘,所有约束都必须是线性的(一般为DCP)。

如果您尝试执行禁止的操作,CVXPY 会引发 DCPError。

import cvxpy
x = cvxpy.Variable()
y = cvxpy.Variable()
constraints = [x*y > 1]

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\cvxpy\expressions\expression.py", line 43, in cast_op
    return binary_op(self, other)
  File "C:\Python27\lib\site-packages\cvxpy\expressions\expression.py", line 226, in __mul__
    raise DCPError("Cannot multiply two non-constants.")
cvxpy.error.DCPError: Cannot multiply two non-constants.
Run Code Online (Sandbox Code Playgroud)

如果至少一个变量是整数/布尔值,则可以使用松弛变量来避免这种情况。否则,您可以使用任何非线性求解器,例如IPOPT。

同样的问题在这里得到了回答。