【发布时间】:2020-04-24 20:06:56
【问题描述】:
我正在尝试编写一个在 LMI 约束下解决 B(2,1) 的问题。
R(2,1)=R0(2,1)+H(2,2)*B(2,1)
Vc 是一个标量变量
越来越多
> "DCPError: 问题不符合 DCP 规则。"
import numpy as np
import cvxpy as cp
H = np.random.rand(2,2)
R0 = np.random.rand(2,1)
B=cp.Variable((2,1), complex=True)
Rf=cp.diag(R0+H*B)
RRf=cp.real(Rf)
IRf=cp.imag(Rf)
Vc=cp.Variable()
Vc2= (Vc**2)
z=np.zeros((Rf.shape[0],Rf.shape[1]))
I=np.eye(Rf.shape[0])
objective3=cp.Minimize(Vc2)
LMI =cp.bmat( [
[Vc2*I, RRf, z, -IRf],
[RRf, I, IRf, z],
[z, IRf, Vc2*I, RRf],
[-IRf, z, RRf, I]
])
const1 = LMI >=0
const2 = Vc >=0
prob=cp.Problem(objective3,[const1,const2])
print(prob.is_dcp())
[1]: https://i.stack.imgur.com/IQpxh.png
【问题讨论】:
-
假设目标函数是 DCP =True 并且 ----- LMI 块是 DCP=True ----- const1 DCP is = False 虽然?!
-
矩阵中出现了变量的平方。这不符合 DCP。
-
感谢您的回复! @MichalAdamaszek,我在LMI块中替换了变量Vc而不是它的正方形,它返回了一个有效的DCP问题..不幸的是,出现了以下错误:Anaconda3\lib\site-packages\cvxpy\reductions\complex2real\ complex2real.py",第 146 行,在 canonicalize_expr 中断言所有(对于 imag_args 中的 v 而言,v 是 None)AssertionError
-
据我所知,要获得 LMI,您应该写
LMI>>0而不是LMI>=0。您现在所做的只是说所有条目都是非负数,这可以解释错误(虚部非零)。 -
@MichalAdamaszek 我试过
LMI>>0,但它给出了相同的AssertionError。可能是因为我使用的是复杂变量吗?
到现在为止,我真的被这个问题困扰了好几个星期。我是机械工程师而不是程序员,但这段代码对工作很有帮助。
标签: python optimization cvxpy convex-optimization