开篇场景(Hook):基数约束如何把 MVO 从 QP 推到 MIP
周二下午,你在一家百亿规模的私募(private fund)量化部门里,给沪深300 成分股做一只全仓做多组合。脚本是教科书版本的均值方差优化(mean-variance optimization, MVO):最小化 21wTΣw−μTw,约束 1Tw=1、w≥0。CVXPY 在 80ms 内返回全局最优。你顺手加了一行「最多持仓 20 只名字」,重启脚本——求解器立刻报错;改成混合整数程序(MIP)后跑了 8 分钟仍未收敛。从「秒级返回」到「跑不出来」,唯一变的是约束的几何性质:从凸掉到了非凸。本节要建立这个判断的基本词汇——什么样的集合是凸集(convex set),什么样的函数是凸函数(convex function),以及为什么这两个性质合起来才让求解器返回一个干净的全局最优。
一、凸集:定义与日常清单
集合 C⊆Rn 是凸集当且仅当对任意 x,y∈C 与 λ∈[0,1],
λx+(1−λ)y∈C.
直观:把集合内任意两点连成线段,整段都还在集合里。下面是量化里最常见的几类凸集——你应当一眼能认出。
- 半空间(halfspace) {x:aTx≤b}。一张超平面把空间砍成两半,留下其中一半。预算上限、风险上限、单行业敞口上限都落在这里。
- 超平面(hyperplane) {x:aTx=b}。半空间的等式版本;满仓约束 1Tw=1 就是一张超平面。
- 多面体(polyhedron) 是有限个半空间的交 {x:Ax≤b};凸集的任意交仍凸,故多面体凸。
- 概率单纯形(probability simplex) Δn={w≥0:1Tw=1}。这正是私募在沪深300 全仓做多 mandate 下能选的全部权重向量。
- 范数球(norm ball) {x:∥x∥≤r} 对任意向量范数(vector norm)都成立;L2 球是其中最常见的一个。
- 椭球(ellipsoid) {x:(x−xc)TP−1(x−xc)≤1},其中 P≻0。它正是单位球在仿射函数(affine map)x↦Ax+xc 下的像。
- 半正定锥(PSD cone) S+n={X=XT:X⪰0}。半正定(positive semidefinite, PSD)锥本身是矩阵空间里的凸集,所有的协方差矩阵(covariance matrix)都住在这里。
保凸操作(convexity-preserving operations):把这些原子拼成更复杂的可行域时,只需记住四条规则。任意(甚至无穷多)凸集的交仍是凸集;凸集在仿射函数 x↦Ax+b 下的像与原像都还是凸集;凸集乘以非负常数仍凸;两个凸集的 Minkowski 和 C1+C2={x+y:x∈C1,y∈C2} 也凸。多面体可由半空间交出来,椭球可写成单位球的仿射像——掌握这四条,你能从原子搭出绝大多数符合 mandate 的可行域。
二、凸函数:三种等价定义
函数 f:Rn→R 是凸函数当且仅当对任意 x,y 与 λ∈[0,1],
f(λx+(1−λ)y)≤λf(x)+(1−λ)f(y).
几何上,函数图像上任两点之间的连线段始终位于图像上方。这条线段不等式等价于另外两个常用判据。
- 上图集(epigraph)判据:f 凸 ⟺ 它的上图集 epif={(x,t)∈Rn+1:f(x)≤t} 是凸集。这条把「函数凸」翻译成「集合凸」,便于直接套用上一节的保凸操作。
- 一阶判据:若 f 一阶可微,则 f 凸 ⟺ 对所有 x,y 在定义域内,f(y)≥f(x)+∇f(x)T(y−x)。即函数图像处处位于其切超平面之上。
- 二阶判据(second-order characterization):若 f 在定义域上二阶可微,则
f 凸⟺∇2f(x)⪰0 对定义域内所有 x.
Hessian ∇2f 自动是对称矩阵(symmetric matrix),二阶判据等价于其所有特征值(eigenvalue)非负——这正是上一模块(线性代数与微积分)里 Hessian 判据的延伸:你只需要查特征值的符号即可。
下面这个滑块让你直观感受最简单的凸二次函数 f(x)=21x2 在不同 x 处的取值变化:
Formula Explorer
0.5 * x**2
三、一张分类表,把常见对象认清
| 函数 | 凸 / 凹 / 都不是 | 一行理由 |
|---|
| 仿射 f(x)=aTx+b | 既凸又凹 | 二阶导恒为零;线段不等式两边恰好相等 |
| 二次型 21xTQx+bTx,Q⪰0 | 凸 | Hessian 恰为 Q,半正定;MVO 风险项 wTΣw 即此类(Σ 是协方差矩阵) |
| 向量范数 ∥x∥(含 L1,L2,L∞) | 凸 | 三角不等式 ∥λx+(1−λ)y∥≤λ∥x∥+(1−λ)∥y∥ 直接给出线段不等式 |
| 凸集指示函数 IC(x)(C 凸) | 凸 | 上图集等于 C×R+,仍凸 |
| −logx 在 R++ 上 | 凸 | 二阶导 1/x2>0;对数效用最大化等价于最小化这一项 |
| log∑iexi(log-sum-exp) | 凸 | Hessian 是某个离散分布的协方差矩阵,自动 PSD |
| 仿射函数族的逐点最大 maxi(aiTx+bi) | 凸 | 上图集是各半空间上图集的交,仍凸 |
| xlogx 在 R++ 上 | 凸 | 二阶导 1/x>0;熵的负号 |
读这张表时记住一个动作:先看 Hessian,再回到线段不等式做心算检查——两套判据彼此印证。
四、严格凸与最优解的唯一性
把线段不等式的 ≤ 在 λ∈(0,1) 且 x=y 时改成严格 <,就得到严格凸(strictly convex)。直接结果是:无约束最小化的最优解最多一个。如果 Σ≻0(而不仅 ⪰0),MVO 的风险项严格凸,组合权重的最优解被唯一钉死;若 Σ 退化(半正定但不正定,比如因子模型把噪声维度压扁后),就可能整整一条「等价最优」的方向都达到同一个目标值,此时数值解会随求解器随机性漂移——一个值得在生产代码里加诊断断言的细节。
练习:识别一个 mandate 的几何
Exercise
设 Σ∈Rn×n 满足 Σ⪰0,μ∈Rn,常数 c>0。回答两个独立的判断:
(i) 集合 S={w∈Rn:1Tw=1,w≥0,∥w∥2≤c} 是不是凸集?
(ii) 函数 f(w)=wTΣw−μTw 是不是凸函数?
把你的依据写下来——「我用了哪条判据」比「是 / 否」更重要。
提示
把
S 拆成三块:超平面
1Tw=1、非负卦限
w≥0(
n 个半空间的交)、
L2 范数球
∥w∥2≤c。每块单独凸性都已在上文清单中确认;再用保凸操作把三块合起来。
提示
f 由两项构成。线性项
−μTw 是仿射函数,Hessian 为零矩阵;二次项
wTΣw 的 Hessian 是
2Σ。两者相加后回到二阶判据
∇2f⪰0,问题转化为
Σ 是否半正定——而这正是题目给定的条件。
通往下一节
到此你已经能在一组约束面前回答两个最基本的问题:可行域是不是凸集?目标函数是不是凸函数?下一节把这两件事拼到一起——把凸目标、凸不等式约束、仿射等式约束写进同一个标准形式,并证明这种组合下「任何局部最优都是全局最优」的核心定理。