半定松弛
我将为你详细讲解“半定松弛”这一概念。这个过程分为四个循序渐进的步骤,从问题背景到实际应用,每一步都力求精确细致。
步骤1:问题背景——为什么需要半定松弛?
在许多优化问题中,我们经常会遇到“组合优化”或“非凸二次规划”问题,例如最大割问题、布尔二次规划、传感器网络定位等。这些问题通常含有离散变量(如取值为0或1)或二次约束,直接求解往往非常困难(通常是NP难的)。为了得到可处理的近似解,研究者引入了“松弛”技术:将原问题放宽为一个更容易求解的问题,而松弛后的问题能提供一个原问题最优值的界。半定松弛就是一种将原问题(特别是含二次型约束的问题)转化为“半定规划”的松弛方法,因为半定规划是多项式时间可解的凸优化问题。
步骤2:核心思想——如何构建半定松弛?
考虑一个典型的非凸二次优化问题:
最小化 \(x^T Q x + c^T x\)
满足 \(x_i^2 = 1\)(例如 \(x_i \in \{-1, 1\}\))或其他二次约束。
这里的关键技巧是引入一个矩阵变量 \(X = x x^T\)。注意 \(X\) 是一个对称半正定矩阵(记作 \(X \succeq 0\)),且秩为1。原目标函数可以重写为 \(\langle Q, X \rangle + c^T x\),其中 \(\langle \cdot, \cdot \rangle\) 表示矩阵内积。原约束 \(x_i^2 = 1\) 等价于 \(X_{ii} = 1\)。
此时,原问题等价于在约束 \(X \succeq 0\),\(\text{rank}(X) = 1\),\(X = xx^T\) 下优化。但秩1约束是非凸的。半定松弛的核心就是“丢弃”这个秩1约束,只保留 \(X \succeq 0\) 和 \(X_{ii} = 1\),从而得到一个关于变量 \((x, X)\) 的半定规划问题。由于删除了秩约束,可行域扩大了,所以松弛后问题的最优值是原问题最优值的下界(对于最小化问题)。
步骤3:求解与恢复原解——从松弛解得到可行解
求解松弛后的半定规划(使用内点法等凸优化算法)后,我们得到最优对 \((x^*, X^*)\),其中 \(X^*\) 一般是满秩的,不满足 \(X^* = x^* (x^*)^T\)。为了得到原问题的可行解,常用方法是“随机舍入”:对 \(X^*\) 进行Cholesky分解或特征值分解,得到 \(X^* = \sum_i \lambda_i v_i v_i^T\),然后随机生成向量 \(\xi\) 服从标准正态分布,并构造 \(y = \sum_i \sqrt{\lambda_i} (\xi^T v_i) v_i\),再对 \(y\) 的每个分量取符号(对于 \(x_i \in \{-1,1\}\) 问题)或进行投影。通过多次随机取样,选取最好的结果作为近似解。理论上,这种松弛和舍入方法在许多问题中能提供有性能保证的近似比(例如Goemans-Williamson算法对最大割问题有0.878的近似比)。
步骤4:应用与扩展
半定松弛已成功应用于多个领域:
- 组合优化:如图的最大割、最大团、图着色问题。
- 非凸二次规划:如布尔二次规划、二次指派问题。
- 系统与控制:在传感器网络定位、相位恢复、鲁棒滤波器设计中处理非凸约束。
- 机器学习:在聚类、社区发现、稀疏主成分分析中构造凸松驰。
值得注意的是,半定松弛的代价是增加了变量规模(从 \(n\) 维到 \(O(n^2)\) 维),因此通常用于中等规模问题。对于大规模问题,常需利用问题结构设计更高效的专用算法。此外,半定松弛还可以与其他技术(如拉格朗日松弛、行列生成)结合,形成更强大的求解框架。