簡體   English   中英

使用 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()

每次我嘗試運行此代碼時,都會收到以下錯誤:

“正定約束中的非方陣。”

但矩陣顯然是方形的! 所以我不知道發生了什么。 有任何想法嗎? 非常感謝您的幫助!

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會做的是使它對稱(顯然是通過將它添加到它的轉置)。 給出的解決方案是最小gamma ,使得[[1, 0.5+gamma], [0.5+gamma, 3]] >> 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM