使用 CVXPY 实现 LMI 约束

Implement LMI constraint with CVXPY

所以我正在尝试使用 CVXPY 包(具有线性矩阵不等式约束的优化问题)在 Python 中实现一个简单的优化代码。代码如下所示。

我已经尝试 运行使用 Python 3.6 编译代码。

import cvxpy as cp
import numpy as np
import matplotlib.pyplot as plt
import control as cs

gamma = cp.Variable();
MAT1 = np.array([[1, gamma], [1+gamma, 3]])

constraints_2 = [MAT1 >> 0]
prob = cp.Problem(cp.Minimize(gamma),constraints_2)
prob.solve()

每次尝试 运行 这段代码时,我都会收到以下错误:

"Non-square matrix in positive definite constraint."

但是矩阵分明是正方形的!所以我不知道发生了什么。 有任何想法吗? 非常感谢您的帮助!

MAT1 是一个 numpy 数组,您需要将其设为 cvxpy 变量才能使用半定约束。试试这个:

MAT1 = cp.Variable((2, 2))
constraints_2 = [MAT1 >> 0, MAT1[0, 0] == 1, MAT1[1, 0] == 1 + MAT1[0, 1], MAT1[1, 1] == 3]
prob = cp.Problem(cp.Minimize(MAT1[0, 1]), constraints_2)

gamma 大约是 -2.73

这里有一个技术和概念问题

技术问题

问题是你的 MAT1 不是 numpy 数组

你可以写

MAT1=cvxpy.vstack([cvxpy.hstack([1 , gamma]), cvxpy.hstack([1+gamma, 3])])

或者更简洁

MAT1=cvxpy.vstack([cvxpy.hstack([1 , gamma]), cvxpy.hstack([1+gamma, 3])])

这样 cvxpy 将接受您的代码,但不会给出正确答案。

概念问题

SDP 问题仅对对称矩阵是凸的,cvxpy 要做的是使其对称(显然是通过将其添加到它的转置中)。给出的解决方案是满足 [[1, 0.5+gamma], [0.5+gamma, 3]] >> 0.

的最小值 gamma