半定规划
半定规划(semidefinite programming,SDP)在实对称半正定矩阵约束及仿射约束下优化线性目标。它把逐个标量的不等式推广为对所有方向都成立的二次型不等式;“每个元素都非负”与“半正定”是不同条件。
一个二阶矩阵的最小迹
考虑 半正定要求对每个 有 。取标准基得到x、y非负;x若为零,取 便有 ,选很负的u会违反,故本例x必须正。再配方: 所以约束等价于 ,即正象限内xy至少一。
最优性可以不求导就证明:对方向 ,有 。因此目标至少二;取x=y=1时矩阵为 ,对任意方向的二次型是 ,确为可行并达到二。这里一个特定方向提供目标下界,完整半正定验证提供可行上界,两者闭合才证明最优。
线性矩阵不等式的含义
记 为k阶实对称矩阵空间, 为其中半正定者。一般形式为 其中 、。矩阵随变量仿射变化,所以称线性矩阵不等式,虽然由它限定的标量可行域未必是多面体。主例消元后出现xy,正说明了这一点。
矩阵锥凸性直接来自定义:若P、Q半正定且 ,任意方向v都满足 。故其仿射原像凸,线性目标上的SDP是凸优化。另一标准形式使用对称矩阵变量X、目标 、约束 及 。[1]
对称性在定义中不可省略。非对称矩阵的二次型只看见其对称部分,不能由二次型非负就把它归入这里的对称锥。即使矩阵对称,只有对角非负也不够: 的元素全为正,却在方向 上给出负二,其特征值为三和负一。半正定也允许零特征值,主例最优矩阵就有特征值二和零,不是正定。
变式与低维证书计算
把固定非对角元改为实数c,约束为 。取方向 (c为零时任取正负号),得到 。取 时二次型为 ,达到此界。因此变式c=−2的最优点为x=y=2,目标四,负的非对角元完全可以出现在半正定矩阵中。
下例只用标准库,输入固定非对角元c,返回解析最优矩阵、特征值及方向下界,不改写输入。二阶对称矩阵的特征值为 ,代码用它复核。固定二阶成本为常数;一般稠密k阶对称特征值分解约为 ,数值容差下接近零的特征值还需结合残差解释。
import math
def sdp_minimum_trace(off_diagonal=1.0):
c = float(off_diagonal)
x = y = abs(c)
discriminant = math.hypot(x-y,2*c)
eigenvalues = ((x+y-discriminant)/2,(x+y+discriminant)/2)
sign = 1 if c >= 0 else -1
direction_value = x+y-2*sign*c
return ((x,c),(c,y)),eigenvalues,2*abs(c),direction_value
for c in (1,-2,0):
print(c,sdp_minimum_trace(c))
assert sdp_minimum_trace(-2)[1] == (0.0,4.0)
参考文献
- ↑ Boyd and Vandenberghe, Convex Optimization,§4.6.2,式4.50—4.51。