前言

之前的几篇博客 经典的SDR算法: 用半正定松弛法 ( Semidefinite Relaxation) 求解二次优化问题 和 经典的SDR算法(下):SDR的具体使用细节与相关代码 中介绍了一种行之有效的 QCQP问题的求解方法。 这其中, SDP 半正定规划 是 无可避免的必由之路。 然而,传统的CVX求解方法, 如内点法等, 其复杂度为 O(n3.5log⁡(1/ϵ))O\left(n^{3.5} \log (1 / \epsilon)\right)O(n3.5log(1/ϵ)), 其中 nnn 为变量维度, ϵ\epsilonϵ 为目标精度。 可以看出, 这在现有算法中,绝不能算是低复杂度的算法。 而 SDR 本身的性能又是次优的, 这就令其实际应用显得非常尴尬。 这篇博客, 笔者希望介绍一种 基于 块坐标下降方法的 SDP 求解算法, 旨在降低计算复杂度。

主要参考文章为:《PHASE RECOVERY, MAXCUT AND COMPLEX SEMIDEFINITE PROGRAMMING》

块坐标下降

对于 块坐标下降法, 其实可以简单地理解为大型的交替优化——固定一些变量而优化另一些变量。 对于 SDP问题, 我们先给出典型的问题形式如下:

minimize⁡Tr⁡(UM)subject to U⪰0\begin{array}{ll} \operatorname{minimize} & \operatorname{Tr}(U M) \\ \text { subject to } & U \succeq 0 \end{array} minimize subject to ​Tr(UM)U⪰0​
这个限制条件非常棘手。 因此, 我们将其转化为如下的无约束问题:
minimize Tr⁡(UM)−μlog⁡det⁡(U)(1)\text { minimize } \operatorname{Tr}(U M)-\mu \log \operatorname{det}(U)\tag{1}  minimize Tr(UM)−μlogdet(U)(1)
其中 μ>0\mu>0μ>0 为 障碍系数。 这是基于内点法的思想:通过在目标函数中加入障碍函数,从而自然地限制解在可行集中。 注意到, 原可行集 U⪰0U\succeq 0U⪰0 等效为: UUU的所有特征值u1,⋯,unu_1,\cdots, u_nu1​,⋯,un​非负。 又根据行列式的性质,有:
det(U)=Πi=1nui\mathrm{det}(U)=\Pi_{i=1}^{n}{u_i}det(U)=Πi=1n​ui​,
即有:
log⁡det⁡(U)=∑i=1nlog(ui).\log \operatorname{det}(U)= \sum_{i=1}^n\mathrm{log}(u_i).logdet(U)=i=1∑n​log(ui​).
而根据log\mathrm{log}log的定义域, 可知,这个障碍函数隐含了所有特征值非负的条件。 接下来,对问题进行拆解来降低求解的复杂度。 注意到存在如下等式:
det⁡(U)=det⁡(B)det⁡(y−xTB−1x)(2)\operatorname{det}(U)=\operatorname{det}(B) \operatorname{det}\left(y-x^{T} B^{-1} x\right)\tag{2} det(U)=det(B)det(y−xTB−1x)(2)
其中
U=(BxxTy)(3)U=\left(\begin{array}{cc} B & x \\ x^{T} & y \end{array}\right)\tag{3} U=(BxT​xy​)(3)
(注意, UUU是共轭对称矩阵, 否则特征值可能为虚数, 因此,UUU必能写成上式的形式)。 (2) 的证明放在后面的附录中, 我们先继续往下: 这样转化的目的非常明确, 我们每次优化 UUU 中的部分变量即 xxx。那么(2)已经把障碍函数中和xxx相关的项提取出来了,即 det⁡(y−xTB−1x)\operatorname{det}\left(y-x^{T} B^{-1} x\right)det(y−xTB−1x)。 经此, 事实上(1)中与xxx有关的部分,可以体现为如下的优化问题:
min⁡xcTx−μlog⁡(1−xTB−1x)\min _{x} c^{T} x-\mu \log \left(1-x^{T} B^{-1} x\right) xmin​cTx−μlog(1−xTB−1x)
而这个问题是一个凸函数的最小化问题——log(x)\mathrm{log}(x)log(x)为非减的凹函数, 1−xTB−1x1-x^TB^{-1}x1−xTB−1x 为凹函数, 那么根据复合函数的结论 https://zhuyulab.blog.csdn.net/article/details/121102961, 可知 log⁡(1−xTB−1x)\log \left(1-x^{T} B^{-1} x\right)log(1−xTB−1x) 为凹。 那么 xxx 的最优解可以直接由一阶条件给出, 即目标函数对 xxx 求导为0, 即:
c+2μ1−xTB−1xB−1x=0c + \frac{2\mu}{1-x^{T} B^{-1} x}B^{-1}x=0c+1−xTB−1x2μ​B−1x=0
那么 xxx 的形式为 x=αBcx =\alpha Bcx=αBc (否则右边不为0), 其中 α\alphaα 为待定常数。 代入得:
c+2μα1−α2cTBcc=0⇒2μα1−α2cTBc=−1⇒α2cTBc−2μα−1=0c + \frac{2\mu\alpha}{1-\alpha^2c^TBc}c=0\Rightarrow \frac{2\mu\alpha}{1-\alpha^2c^TBc}=-1\Rightarrow \alpha^2c^TBc-2\mu\alpha-1=0c+1−α2cTBc2μα​c=0⇒1−α2cTBc2μα​=−1⇒α2cTBc−2μα−1=0
令 γ=cTBc\gamma = c^TBcγ=cTBc, 由一元二次方程根可知,
α=μ−μ+γγ\alpha=\frac{\mu-\sqrt{\mu +\gamma}}{\gamma}α=γμ−μ+γ​​
这里需要指出, 为什么不取另一个解 α=μ+μ+γγ\alpha=\frac{\mu+\sqrt{\mu +\gamma}}{\gamma}α=γμ+μ+γ​​ 呢? 这是因为, 我们必须满足 1−xTB−1x>01-x^{T} B^{-1} x>01−xTB−1x>0。 至此, xxx 的 闭式解为:
x=μ−μ+γγBc(4)x = \frac{\mu-\sqrt{\mu +\gamma}}{\gamma}Bc\tag{4}x=γμ−μ+γ​​Bc(4)。

至此 对于 问题(1) 中的优化, 我们可以对其每一列(事实上是每一列去掉一个元素, 以契合(3)中xxx的形式)元素进行依次优化,来求解 SDP问题。

最后给出伪代码:

不得不说有点抽象, 我简单解释一下: 这里 XXX 就是 (1) 中的变量 UUU。 ici_cic​即列索引中去掉iii后的集合。 如Xic,ickX_{i^{c}, i^{c}}^{k}Xic,ick​ 就是指把 XXX 矩阵的第iii行第iii列去除后的结果。 Xic,iX_{i^c,i}Xic,i​ 其实就对应 每次的优化变量 xxx。 step 4 的结果可以看做是 (4) 的 简化形式。

证明:

det⁡(U)=det⁡(B)det⁡(y−xTB−1x)\operatorname{det}(U)=\operatorname{det}(B) \operatorname{det}\left(y-x^{T} B^{-1} x\right) det(U)=det(B)det(y−xTB−1x)

根据分块矩阵乘法,有:
det⁡[ABCD]=det⁡([AOCD−CA−1B][IA−1BOI])=det⁡(A)⋅det⁡(D−CA−1B)\begin{aligned} \operatorname{det}\left[\begin{array}{ll} \boldsymbol{A} & \boldsymbol{B} \\ \boldsymbol{C} & \boldsymbol{D} \end{array}\right] &=\operatorname{det}\left(\left[\begin{array}{cc} \boldsymbol{A} & \boldsymbol{O} \\ \boldsymbol{C} & \boldsymbol{D}-\boldsymbol{C} \boldsymbol{A}^{-1} \boldsymbol{B} \end{array}\right]\left[\begin{array}{cc} \boldsymbol{I} & \boldsymbol{A}^{-1} \boldsymbol{B} \\ \boldsymbol{O} & \boldsymbol{I} \end{array}\right]\right) \\ &=\operatorname{det}(\boldsymbol{A}) \cdot \operatorname{det}\left(\boldsymbol{D}-\boldsymbol{C A}^{-1} \boldsymbol{B}\right) \end{aligned} det[AC​BD​]​=det([AC​OD−CA−1B​][IO​A−1BI​])=det(A)⋅det(D−CA−1B)​
得证。

SDP半正定规划的低复杂度求解:基于块坐标下降(Block Coordinate Descent)相关推荐

  1. 优化问题-半正定规划(Semi-Definite Program, SDP)

    文章目录 背景 SDP的两种形式 QCQP和SOCP转化为SDP SDP在组合优化中的应用 SDR的一些例子 下行发送功率最小化 背景 半正定规划(Semi-Definite Program, SDP ...

  2. UA MATH567 高维统计II 随机向量6 亚高斯随机向量的应用: 半正定规划

    UA MATH567 高维统计II 随机向量6 亚高斯随机向量的应用: 半正定规划 半正定规划(semidefinite programming, SDP)是凸优化的一个分支: max⁡X⟨A,X⟩s ...

  3. 数值计算·第九集:半正定规划(CVXPY版)

    Semidefinite program(半正定规划) 标准形式:-A semidefinite program (SDP) is an optimization problem of the for ...

  4. matlab 半正定规划,CVX介绍——半定规划模式

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

  5. matlab 半正定规划,半定规划算法(Semi-Definite Programming Algorithm).ppt

    初始点: 例子2: 化成半定规划的标准形式如下: 初始点: 谢 谢! SDPs的一个原始-对偶对的KKT最优性条件 (1) 若 满足式(1)中的前2个方程,则称其为一个原始-对偶对的可行点,若进一步 ...

  6. 【OR】YALMIP 半正定规划

    导航 Semidefinite Programming Semidefinite Programming 给定线性动态系统 x˙=Ax\dot{x}=Ax x˙=Ax 通过找到对称矩阵PPP证明系统的 ...

  7. 使用gopsolver和SDPA求解库实现C++正定规划

    一.求解库官方网站 gposlver求解库:https://cmp.felk.cvut.cz/gposolver/ SDPA求解库:https://sourceforge.net/projects/s ...

  8. 半正定松弛法(SDR)2021-11-06

    @[TOC](半正定松弛法 ( Semidefinite Relaxation) 求解二次优化问题(QCQP)) SDR适用问题的表现形式 min⁡x∈RnxTCxs.t.xTAix⊵ibi,i=1, ...

  9. 经典的SDR算法: 用半正定松弛法 ( Semidefinite Relaxation) 求解二次优化问题

    前言 本文是博主对于 Zhi-quan Luo 老师的经典著作 <Semidefinite Relaxation of Quadratic Optimization Problems> 的 ...

最新文章

  1. 14_传智播客iOS视频教程_instancetype
  2. java 创建多线程_Java创建多线程
  3. linux学习blog
  4. 毕业三年,贷款40万创业之后我又做回了程序员
  5. JDK源码——利用模板方法看设计模式
  6. sublime加入input函数_【挑战自学Python编程】第八天:while循环以及input()函数
  7. spring mvc java 把多文件打包成zip,并下载
  8. hashmap java 排序_Java HashMap 默认排序
  9. 个人学习C语言的目标
  10. 计算机cpu属于什么症状,电脑CPU超频过度有什么表现
  11. 远程服务器下载百度网盘中的内容
  12. MYSQL 查询某个月有多少天数?
  13. 计算机硬件希沃课件,希沃课件怎么转为ppt?
  14. 经典梯度下降、随机梯度下降、批量梯度下降是个啥?
  15. 计算机什么是符号健,键盘数字健1-8的标点符号的名称什么
  16. JZOJ3426. 封印一击
  17. Delphi FireDAC 出现[FireDAC][DatS]-32. Variable length column [*] overflow. Value length - [*]
  18. TypeScript 泛型T使用整理
  19. 伪元素进度条_使用HTML5进度元素
  20. Java小农养成记第三十天

热门文章

  1. 计算机安全事件现象级解决方案,长篇干货:5类10款现象级产品,带你了解产品生命周期那些事...
  2. linux ssh详解
  3. 百度AI身份证识别接口开发
  4. 漫谈专有云集成与发布机制
  5. 学习笔记(6):Google开发专家带你学 AI:入门到实战(Keras/Tensorflow)(附源码)-实战:电影评论分类模型
  6. HeyUI组件库发布vscode插件,PS教程: 如何开发vscode插件?
  7. 【杂记】新上手的罗技鼠标和键盘
  8. msm8953 + android7.1.2知识总结
  9. spring cloud gateway 之限流篇 1
  10. 大数据时代催生万亿商机