我想把LMI约束优化问题从Matlab转换成Python。在阅读CVXPY文档时,我发现可以通过创建矩阵变量并添加相应的约束来定义LMI约束问题。但是,我需要使用以下块LMI,而不是用简单的LMI来约束问题:
其中,P
是矩阵变量,L
是标量。其他符号是动态系统的状态空间矩阵。
在CVXPY中可以使用这种LMI作为约束吗?如果没有,还有其他工具可以让我用Python解决这个问题吗?
最佳答案
我遵循Rodrigo de Azevedo发布的示例,并设法在cvxpy中编写给定的LMI。
作为参考,我编写的代码可能对某些人有帮助:
n = A.shape[0]
L = Variable((B2.shape[1], n))
P = Variable((n, n), PSD=True)
gamma2 = Variable()
LMI1 = bmat([
[P, A*P + B2*L, B1, np.zeros((B1.shape[0], D11.shape[0]))],
[P*A.T + L.T * B2.T, P, np.zeros((P.shape[0], B1.shape[1])), P*C1.T + L.T*D12.T],
[B1.T, np.zeros((B1.shape[1], P.shape[1])), np.eye(B1.shape[1]), D11.T],
[np.zeros((C1.shape[0], B1.shape[0])), C1*P + D12*L, D11, gamma2*np.eye(D11.shape[0])]
])
cons1 = LMI1 >> 0
cons2 = P == P.T
cons3 = gamma2 >= 0
然后,为了解决这个问题:
optprob = Problem(Minimize(gamma2), constraints=[cons1, cons2, cons3])
optprob.solve()
norm = np.sqrt(gamma2.value)
Pop = P.value
Lop = L.value