二阶锥规划
二阶锥规划(second-order cone programming,SOCP)在仿射目标、仿射等式以及“欧氏范数不超过仿射量”的约束下优化。范数约束同时描述方向和大小,右侧还隐含非负要求。它可表达最小包围圆、某些鲁棒约束和凸二次上图。
三个点的最小包围圆
给定平面点 ,选择圆心z及半径r,要求三点都在圆内。模型为 范数约束本身已迫使r非负。若圆心为 ,左右两点的较大距离平方为 ;到上方点的距离至少为 。当 ,后一个下界大于5/4;当 ,。所以半径不可能小于5/4。
取 ,三个距离都恰为5/4,达到下界,证明全局最优。若r达到这个值,上述不等式还迫使 ,故圆心唯一。
二阶锥及凸性证明
维数k的Lorentz锥写为 。若两个点在锥内、,由三角不等式 所以凸组合仍在锥内。一般SOCP可写为 ,约束 各矩阵维数须使范数内向量和对应标量有定义;x为共同决策向量。仿射映射的凸锥原像仍凸,故整个模型凸。[1]
二次变换中的符号条件
直接平方 时必须同时保留 ,否则平方式 也会接受负t。例如u为零、t为负一满足平方式,却不在二阶锥中。
对 ,旋转锥约束 等价于 证明平方两边并消去 ,得到 ;非负条件保证右侧s+t允许从平方式开方。若没有非负条件,s=t=−1、u=0会满足乘积式却违反范数式。
因此当 时, 可用u=Rx、t=1的上述约束表示;不定二次型不能未经处理就写成某个范数平方。
端点变式与直接实现
把上方点改为 。左右两点距离二,任意包围圆的直径至少二,所以r至少一;圆心原点、半径一包含全部三点,故最优。此时较矮的第三点不在圆周,不能仍强求三点等距。一般上方高度h为非负时,圆心高度为 (h=0时取零),半径据此求最大距离。
下例只用标准库,解析求解这组三点并返回各点距离,不改写输入。固定规模的成本为常数;一般SOCP需要锥优化算法,不能由这一个对称模型的闭式解估计通用求解成本。数值运行应检查范数残差和终止状态,而不是仅检查平方后的残差。
import math
def symmetric_enclosing_circle(height=2.0):
h = float(height)
if h < 0:
raise ValueError("nonnegative apex height required")
y = max(0.0,(h*h-1)/(2*h)) if h > 0 else 0.0
distances = [math.hypot(1,y),math.hypot(1,y),abs(h-y)]
radius = max(distances)
return (0.0,y),radius,distances
print("main",symmetric_enclosing_circle())
print("variant",symmetric_enclosing_circle(.5))
assert symmetric_enclosing_circle()[1] == 1.25
assert symmetric_enclosing_circle(.5)[1] == 1.0
参考文献
- ↑ Boyd and Vandenberghe, Convex Optimization,§4.4.2;二阶锥的定义见§2.3.3。