CVX介绍——半定规划模式

这些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  illegal
X >= ones(n,n)  or  ones(n,n) >= Y  legal
X >= 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的测试。

  • 4
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
半定规划(Semidefinite Programming,SDP)是一种重要的凸优化问题,它在组合优化、控制理论、信号处理、机器学习等领域有广泛的应用。Matlab提供了几种求解SDP问题的工具箱,其中最常用的是YALMIP和CVX。 YALMIP是一个Matlab工具箱,它提供了一种简单而高效的方式来描述和求解凸优化问题,包括线性规划、二次规划半定规划等。YALMIP采用了类似MATLAB的语法,用户可以定义变量和约束条件,并通过调用内置求解器来求解问题。YALMIP支持多种求解器,包括SDPT3、SeDuMi、Mosek等。 CVX也是一个Matlab工具箱,它提供了一种简单而强大的方式来描述和求解凸优化问题。CVX的语法与YALMIP有些不同,但也非常易于使用。CVX支持多种求解器,包括SDPT3、SeDuMi、Mosek等。 使用YALMIP和CVX求解SDP问题的一般步骤如下: 1. 定义变量和约束条件。 2. 定义目标函数。 3. 调用内置的求解器来求解问题。 下面是一个简单的例子,演示如何使用YALMIP和CVX求解一个SDP问题: 使用YALMIP: ``` % 定义变量和约束条件 n = 2; X = sdpvar(n,n,'symmetric'); F = [X >= 0, trace(X) == 1]; % 定义目标函数 obj = -logdet(X); % 求解问题 options = sdpsettings('solver','sdpt3'); optimize(F,obj,options); % 输出结果 value(X) ``` 使用CVX: ``` % 定义变量和约束条件 n = 2; cvx_begin sdp variable X(n,n) symmetric minimize(-log_det(X)) subject to X >= 0; trace(X) == 1; cvx_end % 输出结果 X ``` 需要注意的是,SDP问题的求解通常比较耗时,因此在实际应用中需要选择合适的求解器和参数,并做好问题的预处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值