Skip to content

5.2 拉格朗日乘数法与 KKT 条件

约束无处不在——组合投资有预算限制、风险敞口有上下阈值。拉格朗日乘数法和 KKT 条件是处理约束优化的核心数学工具,也是 Markowitz 均值-方差模型的解析基础。


一、约束优化

1.1 基本形式

约束优化问题的一般形式:

minxf(x)s.t.gi(x)=0,  i=1,,m\min_{\mathbf{x}} f(\mathbf{x}) \quad \text{s.t.} \quad g_i(\mathbf{x}) = 0,\; i = 1,\dots,m

目标是在满足所有等式约束的前提下,找到使目标函数最小的 x\mathbf{x}

1.2 拉格朗日函数

核心思想:将约束条件以"惩罚项"的形式合并到目标函数中,构造拉格朗日函数(Lagrange function):

L(x,λ)=f(x)+i=1mλigi(x)\mathcal{L}(\mathbf{x}, \boldsymbol{\lambda}) = f(\mathbf{x}) + \sum_{i=1}^m \lambda_i g_i(\mathbf{x})

其中 λi\lambda_i 称为拉格朗日乘数(Lagrange multiplier)。

最优解的必要条件:L\mathcal{L}x\mathbf{x}λ\boldsymbol{\lambda} 的偏导均为零:

xL=0,λL=0\nabla_{\mathbf{x}} \mathcal{L} = \mathbf{0},\quad \nabla_{\boldsymbol{\lambda}} \mathcal{L} = \mathbf{0}

这等价于在原约束条件下找到了 ff 的驻点。

1.3 KKT 条件

对于带不等式约束的问题:

minxf(x)s.t.{gi(x)=0,i=1,,mhj(x)0,j=1,,p\min_{\mathbf{x}} f(\mathbf{x}) \quad \text{s.t.} \quad \begin{cases} g_i(\mathbf{x}) = 0, & i = 1,\dots,m \\ h_j(\mathbf{x}) \le 0, & j = 1,\dots,p \end{cases}

构造广义拉格朗日函数:

L(x,λ,μ)=f(x)+i=1mλigi(x)+j=1pμjhj(x)\mathcal{L}(\mathbf{x}, \boldsymbol{\lambda}, \boldsymbol{\mu}) = f(\mathbf{x}) + \sum_{i=1}^m \lambda_i g_i(\mathbf{x}) + \sum_{j=1}^p \mu_j h_j(\mathbf{x})

KKT 条件包含四个部分:

条件公式含义
平稳性f+λigi+μjhj=0\nabla f + \sum \lambda_i \nabla g_i + \sum \mu_j \nabla h_j = 0梯度平衡
原始可行性gi(x)=0,  hj(x)0g_i(\mathbf{x}) = 0,\; h_j(\mathbf{x}) \le 0满足原约束
对偶可行性μj0\mu_j \ge 0不等式约束乘数非负
互补松弛μjhj(x)=0\mu_j \cdot h_j(\mathbf{x}) = 0要么约束紧贴边界(hj=0h_j=0),要么乘子为 0

互补松弛条件非常直观:如果一个不等式约束没有"绷紧"(即 hj(x)<0h_j(\mathbf{x}) < 0),那它对当前解没有实际影响,对应的乘数 μj\mu_j 为零;反之,如果约束被激活(hj(x)=0h_j(\mathbf{x}) = 0),乘数 μj\mu_j 可能非零,反映该约束的"边际成本"。

实际用途:组合优化中"权重 0\ge 0(不允许做空)"就是不等式约束,KKT 条件告诉你最优解在哪些约束边界上。你不需要手动解 KKT——求解器(如 cvxpy、scipy.optimize)会自动处理。


二、手算实例:两资产组合优化

2.1 问题

有两种资产 A 和 B,年化预期收益率分别为 μA=12%\mu_A = 12\%μB=8%\mu_B = 8\%。投资者有 $100,000\\\$100,000 资金,全部用于投资,求最大化组合预期收益的仓位分配。

设投资 A 的金额为 xx(万元),投资 B 的金额为 yy(万元):

maxx,y  0.12x+0.08ys.t.x+y=10\max_{x,y} \; 0.12x + 0.08y \quad \text{s.t.} \quad x + y = 10

(单位:万元,总预算 10 万元)

2.2 拉格朗日方法

构造拉格朗日函数:

L(x,y,λ)=0.12x+0.08y+λ(10xy)\mathcal{L}(x, y, \lambda) = 0.12x + 0.08y + \lambda(10 - x - y)

求偏导并令为 0:

方程推导结果
L/x=0\partial\mathcal{L}/\partial x = 00.12λ=00.12 - \lambda = 0λ=0.12\lambda = 0.12
L/y=0\partial\mathcal{L}/\partial y = 00.08λ=00.08 - \lambda = 0λ=0.08\lambda = 0.08
L/λ=0\partial\mathcal{L}/\partial \lambda = 010xy=010 - x - y = 0x+y=10x + y = 10

矛盾!两种资产的边际收益率不同(0.120.080.12 \ne 0.08),而约束只允许一个等式拉格朗日乘数——这是因为问题本身是线性的,最优解一定在边界上。

2.3 正确解法

既然 x+y=10x + y = 10,将 y=10xy = 10 - x 代入目标函数:

maxx  0.12x+0.08(10x)=0.04x+0.8\max_x \; 0.12x + 0.08(10 - x) = 0.04x + 0.8

由于系数 0.04>00.04 > 0xx 越大越好。但 xx 不能超过总预算,所以:

变量最优值
xx(资产 A)1010 万元(全部投入收益更高的 A)
yy(资产 B)00 万元
最大收益0.12×10=1.20.12 \times 10 = 1.2 万元

2.4 非线性情况(引入风险)

如果目标函数加入风险项(比如组合方差),问题变为非线性,拉格朗日乘数法才能发挥真正威力:

minw1,w2  12(w12σ12+w22σ22+2w1w2σ12)s.t.w1+w2=1\min_{w_1, w_2} \; \frac{1}{2}(w_1^2 \sigma_1^2 + w_2^2 \sigma_2^2 + 2w_1w_2\sigma_{12}) \quad \text{s.t.} \quad w_1 + w_2 = 1

这时 w1w_1w2w_2 会同时非零——分散化投资的最优解就在两个极端之间。


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

其中 mathbf1\\mathbf{1} 表示元素全为 1 的列向量。因为目标函数是二次的、约束是线性的,KKT 条件构成一个线性方程组,可以解析求解。

  • 做空限制wi0w_i \ge 0(不等式约束,互补松弛条件激活)
  • 行业集中度iindustrykwi0.3\sum_{i \in \text{industry}_k} w_i \le 0.3
  • 换手率约束wiwiprevτ\|w_i - w_i^{\text{prev}}\| \le \tau

现代组合优化几乎都建模为 QP,通过求解 KKT 系统获得最优解——这正是凸优化在量化金融中的核心地位。

Built with VitePress