5.2 拉格朗日乘数法与 KKT 条件
约束无处不在——组合投资有预算限制、风险敞口有上下阈值。拉格朗日乘数法和 KKT 条件是处理约束优化的核心数学工具,也是 Markowitz 均值-方差模型的解析基础。
一、约束优化
1.1 基本形式
约束优化问题的一般形式:
目标是在满足所有等式约束的前提下,找到使目标函数最小的 。
1.2 拉格朗日函数
核心思想:将约束条件以"惩罚项"的形式合并到目标函数中,构造拉格朗日函数(Lagrange function):
其中 称为拉格朗日乘数(Lagrange multiplier)。
最优解的必要条件: 对 和 的偏导均为零:
这等价于在原约束条件下找到了 的驻点。
1.3 KKT 条件
对于带不等式约束的问题:
构造广义拉格朗日函数:
KKT 条件包含四个部分:
| 条件 | 公式 | 含义 |
|---|---|---|
| 平稳性 | 梯度平衡 | |
| 原始可行性 | 满足原约束 | |
| 对偶可行性 | 不等式约束乘数非负 | |
| 互补松弛 | 要么约束紧贴边界(),要么乘子为 0 |
互补松弛条件非常直观:如果一个不等式约束没有"绷紧"(即 ),那它对当前解没有实际影响,对应的乘数 为零;反之,如果约束被激活(),乘数 可能非零,反映该约束的"边际成本"。
实际用途:组合优化中"权重 (不允许做空)"就是不等式约束,KKT 条件告诉你最优解在哪些约束边界上。你不需要手动解 KKT——求解器(如 cvxpy、scipy.optimize)会自动处理。
二、手算实例:两资产组合优化
2.1 问题
有两种资产 A 和 B,年化预期收益率分别为 ,。投资者有 资金,全部用于投资,求最大化组合预期收益的仓位分配。
设投资 A 的金额为 (万元),投资 B 的金额为 (万元):
(单位:万元,总预算 10 万元)
2.2 拉格朗日方法
构造拉格朗日函数:
求偏导并令为 0:
| 方程 | 推导 | 结果 |
|---|---|---|
矛盾!两种资产的边际收益率不同(),而约束只允许一个等式拉格朗日乘数——这是因为问题本身是线性的,最优解一定在边界上。
2.3 正确解法
既然 ,将 代入目标函数:
由于系数 , 越大越好。但 不能超过总预算,所以:
| 变量 | 最优值 |
|---|---|
| (资产 A) | 万元(全部投入收益更高的 A) |
| (资产 B) | 万元 |
| 最大收益 | 万元 |
2.4 非线性情况(引入风险)
如果目标函数加入风险项(比如组合方差),问题变为非线性,拉格朗日乘数法才能发挥真正威力:
这时 和 会同时非零——分散化投资的最优解就在两个极端之间。
Quant Link:Markowitz 均值-方差模型本质上是一个二次规划(Quadratic Programming, QP):目标函数为二次型、约束为线性的优化问题
\\min_{\\mathbf{w}} \\; \\frac{1}{2} \\mathbf{w}^\\top \\Sigma \\mathbf{w} - \\gamma \\boldsymbol{\\mu}^\\top \\mathbf{w} \\quad \\text{s.t.} \\quad \\mathbf{w}^\\top \\mathbf{1} = 1
其中 表示元素全为 1 的列向量。因为目标函数是二次的、约束是线性的,KKT 条件构成一个线性方程组,可以解析求解。
- 做空限制:(不等式约束,互补松弛条件激活)
- 行业集中度:
- 换手率约束:
现代组合优化几乎都建模为 QP,通过求解 KKT 系统获得最优解——这正是凸优化在量化金融中的核心地位。