Я пытаюсь написать код, который решает B(2,1)
проблему с ограничениями LMI.
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
LMI>>0
, а неLMI>=0
. Теперь вы просто сказали, что все записи неотрицательны, что может объяснить ошибку (мнимые части не равны нулю). - person Michal Adamaszek   schedule 28.04.2020LMI>>0
, но он выдает то же AssertionError. Может быть, потому, что я использую сложную переменную? ‹Br/› Я действительно застрял в этой проблеме уже несколько недель. Я инженер-механик, а не программист, но этот код мне очень поможет в работе. - person Maged Eltorkoman   schedule 28.04.2020BR=cp.Variable((2,1)) BI=cp.Variable((2,1)) RRf=cp.diag(R0+H@BR) IRf=cp.diag(H@BI)
- person Michal Adamaszek   schedule 28.04.2020LMI>>0
, а неLMI >=0
, но когда вы указываете это>>
, стандартный решатель SCS не обрабатывает размер матрицы. Итак, я загрузил решатель CVXOPT, и до сих пор он работал нормально. Я надеюсь, что ошибок больше не будет, и я смогу завершить все это. - person Maged Eltorkoman   schedule 29.04.2020