CVX介绍——半定规划模式

来源:互联网 发布:ubuntu 新建文档 编辑:程序博客网 时间:2024/06/06 01:41

这些CVX介绍,主要是翻译CVX官网上面的使用手册,主要目的还是记录吧= =方便查阅
再给出一遍地址http://web.cvxr.com/cvx/doc/sdp.html 可以进去进行英文的对照。

那些熟悉半定规划(SDP)的人知道,在上述关于集合成员关系的讨论中利用集合semidefinite(n)的约束实际上通常用线性矩阵不等式(LMI)表示来表示。例如,给定X =XT∈Rn×nX =XT∈Rn×n,约束条件X⪰0表示X∈Sn+X∈S+ n; 也就是说X是正半定的。
当使用SDP模式时,CVX以不同的方式解释某些不等式约束。 具体来说:
1、平等约束解释相同(即元素)。
2、涉及向量和标量的不等式约束被解释为相同的; 即元素。
3、涉及非平方矩阵的不等式约束是不允许的; 试图使用它们会导致错误。 如果您希望对矩阵X和Y进行真正的元素比较,请使用矢量化操作X(:) <= Y(:)或vec(X)<= vec(Y)。 (vec是由CVX提供的一个功能,相当于冒号操作。)
4、涉及实矩阵的不等式约束解释如下:

X >= Y  becomes X - Y == semidefinite(n)X <= Y  becomes Y - X == semidefinite(n)

如果任何一方都很复杂,那么不平等就被解释如下:

X >= Y  becomes X - Y == hermitian_semidefinite(n)X <= Y  becomes Y - X == hermitian_semidefinite(n)

5、还有一个额外的限制:X和Y必须是相同的大小,或者一个必须是标量零。 例如,如果X和Y是大小为n的矩阵,

X >= 1  or  1 >= Y  illegalX >= ones(n,n)  or  ones(n,n) >= Y  legalX >= 0  or  0 >= Y  legal

实际上,CVX对LMI约束的不等式运算符进行更严格的解释。
6、请注意,LMI约束在其输入上强制实施对称(实或Hermitian)。 与SDPSOL不同,CVX不会为您提取对称部分:您必须小心保证自己的对称性。 由于CVX支持对称矩阵的声明,这是相当简单的。 如果CVX无法确定LMI是否对称于合理的数值容差范围内,则会发出警告。 我们提供了一个函数sym(X)来提取方阵的对称部分; 即sym(X)= 0.5 *(X + X’)。
7、双变量(如果提供)将应用于转换后的相等约束。 如果找到最佳点,它将被赋予一个正半定值。

所以,例如,文件examples / closest_toeplitz_sdp.m中的CVX模型,

cvx_begin    variable Z(n,n) hermitian toeplitz    dual variable Q    minimize( norm( Z - P, 'fro' ) )    Z == hermitian_semidefinite( n ) : Q;cvx_end

可以被写为:

cvx_begin sdp    variable Z(n,n) hermitian toeplitz    dual variable Q    minimize( norm( Z - P, 'fro' ) )    Z >= 0 : Q;cvx_end

CVX示例库中的许多其他示例都使用半定约束;他们都使用SDP模式。要找到它们,只需使用您最喜欢的文件搜索工具在examples /子目录树中搜索文本cvx_begin sdp。其中一个例子转载于索引对偶变量中。

由于semidefinite编程是流行的,有些人可能会奇怪为什么SDP模式不是默认的行为。其原因是我们非常重视保持Matlab原生行为与CVX原生行为之间的一致性。使用> =,<=,>,<运算符创建LMI表示与理想的偏差。例如,在上面的例子中表达式Z> = 0将变量Z约束为正半定。但是,在模型解决之后,Z已经被一个数值所取代,表达式Z> = 0将测试Z的元素非负性。为了验证Z的数值实际上是正半定,你必须执行像min(eig(Z))> = 0的测试。