基于线性规划的“多目标投资组合优化”的ε-约束法求解示例
字数 3632 2025-12-19 13:41:00

基于线性规划的“多目标投资组合优化”的ε-约束法求解示例


题目描述

考虑一个经典的投资组合优化问题,其中投资者希望在不同资产之间分配资金,以在控制风险的同时最大化收益。这里我们考虑一个多目标优化问题,包含两个目标:

  1. 最大化预期收益
  2. 最小化投资风险(以收益的方差衡量)。

设共有 \(n\) 种资产,第 \(i\) 种资产的预期收益率为 \(r_i\),收益的协方差矩阵为 \(\Sigma \in \mathbb{R}^{n \times n}\)。决策变量 \(x_i\) 表示投资于资产 \(i\) 的资金比例。
经典的马科维茨均值-方差模型可写为:

\[\begin{aligned} \text{maximize} \quad & \sum_{i=1}^n r_i x_i \\ \text{minimize} \quad & \sum_{i=1}^n \sum_{j=1}^n \sigma_{ij} x_i x_j \\ \text{subject to} \quad & \sum_{i=1}^n x_i = 1, \\ & x_i \ge 0, \quad i=1,\dots,n. \end{aligned} \]

这是一个双目标二次规划问题。为了将其转化为线性规划可处理的形式,通常采用以下两种方法之一:

  • 将风险作为约束,最大化收益(或反之)。
  • 使用ε-约束法,将其中一个目标转化为约束,从而生成一系列单目标优化问题,进而得到帕累托前沿。

本题要求:
使用ε-约束法,将风险上限设为参数 ε,将原问题转化为一系列线性规划问题,并描述如何求解得到近似帕累托前沿。


解题步骤

步骤1:问题重构为ε-约束形式

我们选择将风险最小化作为主要目标,将收益最大化转化为约束。具体地,我们引入参数 \(R_0\) 表示要求的最低预期收益,将原问题改写为:

\[\begin{aligned} \text{minimize} \quad & \sum_{i=1}^n \sum_{j=1}^n \sigma_{ij} x_i x_j \\ \text{subject to} \quad & \sum_{i=1}^n r_i x_i \ge R_0, \\ & \sum_{i=1}^n x_i = 1, \\ & x_i \ge 0, \quad i=1,\dots,n. \end{aligned} \]

此时问题是一个凸二次规划(因为协方差矩阵 \(\Sigma\) 半正定)。但我们的目标是使用线性规划求解,因此需要进一步处理风险项。


步骤2:风险度量的线性化

二次形式 \(\sum \sum \sigma_{ij} x_i x_j\) 不易直接线性化。一个常见替代方案是使用绝对偏差下半方差等线性风险度量。这里我们采用平均绝对偏差(MAD) 作为风险度量,它可以通过引入辅助变量转化为线性约束。

设历史收益率数据有 \(T\) 个时期,资产 \(i\) 在时期 \(t\) 的收益为 \(r_{it}\),其样本平均为 \(\bar{r}_i = \frac{1}{T} \sum_{t=1}^T r_{it}\)。则投资组合在时期 \(t\) 的收益偏差为:

\[d_t = \sum_{i=1}^n (r_{it} - \bar{r}_i) x_i. \]

MAD 定义为:

\[\text{MAD} = \frac{1}{T} \sum_{t=1}^T |d_t|. \]

优化问题可写为:

\[\begin{aligned} \text{minimize} \quad & \frac{1}{T} \sum_{t=1}^T y_t \\ \text{subject to} \quad & y_t \ge d_t, \quad t=1,\dots,T, \\ & y_t \ge -d_t, \quad t=1,\dots,T, \\ & \sum_{i=1}^n \bar{r}_i x_i \ge R_0, \\ & \sum_{i=1}^n x_i = 1, \\ & x_i \ge 0, \quad i=1,\dots,n, \\ & y_t \ge 0, \quad t=1,\dots,T. \end{aligned} \]

其中 \(y_t\) 是辅助变量,表示 \(|d_t|\)。此时目标函数和约束均为线性,问题转化为线性规划


步骤3:ε-约束法的实施

我们希望得到收益-风险权衡的帕累托前沿。ε-约束法的步骤如下:

  1. 确定收益范围
    计算最大可能收益 \(R_{\max}\)(通过求解线性规划:最大化 \(\sum \bar{r}_i x_i\),满足 \(\sum x_i = 1, x_i \ge 0\))。
    计算最小可能收益 \(R_{\min}\)(通过最小化同一目标,或取单个资产最小平均收益)。

  2. 生成收益约束值
    在区间 \([R_{\min}, R_{\max}]\) 内选取 \(K\) 个等间距点 \(R_0^{(k)}, k=1,\dots,K\)。每一个 \(R_0^{(k)}\) 对应一个风险约束值 ε 的设定(但此处我们将收益作为约束,风险作为目标,所以 ε 对应风险上限,而 \(R_0\) 对应收益下限)。更常见做法是固定风险上限 ε,但这里我们固定收益下限。

  3. 求解一系列线性规划
    对每个 \(R_0^{(k)}\),求解如下线性规划:

\[\begin{aligned} \text{minimize} \quad & \frac{1}{T} \sum_{t=1}^T y_t \\ \text{subject to} \quad & y_t \ge \sum_{i=1}^n (r_{it} - \bar{r}_i) x_i, \quad t=1,\dots,T, \\ & y_t \ge -\sum_{i=1}^n (r_{it} - \bar{r}_i) x_i, \quad t=1,\dots,T, \\ & \sum_{i=1}^n \bar{r}_i x_i \ge R_0^{(k)}, \\ & \sum_{i=1}^n x_i = 1, \\ & x_i \ge 0, \quad i=1,\dots,n, \\ & y_t \ge 0, \quad t=1,\dots,T. \end{aligned} \]

记解得的最小风险值为 \(MAD^*(R_0^{(k)})\)

  1. 绘制帕累托前沿
    以收益 \(R_0^{(k)}\) 为横坐标,风险 \(MAD^*(R_0^{(k)})\) 为纵坐标,将点 \((R_0^{(k)}, MAD^*(R_0^{(k)}))\) 连接,即得到近似的帕累托前沿。该前沿上的每个点都表示在给定收益下限下的最小可能风险。

步骤4:算法伪代码

输入:历史收益率矩阵 R ∈ ℝ^{T×n},收益下限个数 K
输出:帕累托前沿点集 P

计算每项资产平均收益 bar_r = mean(R, axis=0)
计算最大收益 R_max = max{ bar_r^T x | sum(x)=1, x≥0 }
计算最小收益 R_min = min{ bar_r^T x | sum(x)=1, x≥0 }  # 或取 min(bar_r)

初始化 P = []
for k = 1 to K do
    R0 = R_min + (k-1)*(R_max - R_min)/(K-1)
    构建线性规划:
        决策变量:x[1..n], y[1..T]
        目标:min (1/T) * sum_t y_t
        约束:
            for t = 1 to T:
                y_t ≥ sum_i (R[t,i] - bar_r[i]) * x_i
                y_t ≥ -sum_i (R[t,i] - bar_r[i]) * x_i
            sum_i bar_r[i] * x_i ≥ R0
            sum_i x_i = 1
            x_i ≥ 0, y_t ≥ 0
    调用线性规划求解器(如单纯形法)求解
    得到最优解 x*, 最优目标值 MAD*
    将点 (R0, MAD*) 加入 P
end for
返回 P

步骤5:实例演示(数值简化)

假设有2种资产(n=2),3个历史时期(T=3):
收益率数据:

  • 资产1: (5%, 2%, 4%)
  • 资产2: (8%, 1%, 7%)
    计算平均收益:
    \(\bar{r}_1 = (5+2+4)/3 = 3.67\%\)
    \(\bar{r}_2 = (8+1+7)/3 = 5.33\%\)

最大收益:全投资产2,\(R_{\max} = 5.33\%\)
最小收益:全投资产1,\(R_{\min} = 3.67\%\)

取 K=3,收益下限 R0 取值:3.67%, 4.5%, 5.33%。

对 R0=4.5% 构建线性规划:
变量:x1, x2, y1, y2, y3。
收益约束:3.67x1 + 5.33x2 ≥ 4.5。
预算约束:x1 + x2 = 1。
偏差计算(时期1为例):
d1 = (5-3.67)x1 + (8-5.33)x2 = 1.33x1 + 2.67x2。
约束:y1 ≥ d1, y1 ≥ -d1。类似构造时期2、3。
目标:min (y1+y2+y3)/3。

求解得:x1≈0.5, x2≈0.5, MAD≈某个值。
重复对其他 R0 求解,得到三个点,绘制帕累托前沿。


总结

通过将风险度量线性化(如使用MAD),并将收益目标转化为约束,我们可以用ε-约束法将多目标投资组合问题转化为一系列线性规划问题。求解这些线性规划,即可得到近似帕累托前沿,帮助投资者在收益与风险之间权衡选择。该方法避免了直接处理二次目标,计算效率高,且易于实现。

基于线性规划的“多目标投资组合优化”的ε-约束法求解示例 题目描述 考虑一个经典的投资组合优化问题,其中投资者希望在不同资产之间分配资金,以在控制风险的同时最大化收益。这里我们考虑一个 多目标优化 问题,包含两个目标: 最大化预期收益 。 最小化投资风险 (以收益的方差衡量)。 设共有 \(n\) 种资产,第 \(i\) 种资产的预期收益率为 \(r_ i\),收益的协方差矩阵为 \(\Sigma \in \mathbb{R}^{n \times n}\)。决策变量 \(x_ i\) 表示投资于资产 \(i\) 的资金比例。 经典的马科维茨均值-方差模型可写为: \[ \begin{aligned} \text{maximize} \quad & \sum_ {i=1}^n r_ i x_ i \\ \text{minimize} \quad & \sum_ {i=1}^n \sum_ {j=1}^n \sigma_ {ij} x_ i x_ j \\ \text{subject to} \quad & \sum_ {i=1}^n x_ i = 1, \\ & x_ i \ge 0, \quad i=1,\dots,n. \end{aligned} \] 这是一个双目标二次规划问题。为了将其转化为线性规划可处理的形式,通常采用以下两种方法之一: 将风险作为约束,最大化收益(或反之)。 使用 ε-约束法 ,将其中一个目标转化为约束,从而生成一系列单目标优化问题,进而得到帕累托前沿。 本题要求: 使用ε-约束法,将风险上限设为参数 ε,将原问题转化为一系列线性规划问题,并描述如何求解得到近似帕累托前沿。 解题步骤 步骤1:问题重构为ε-约束形式 我们选择将 风险最小化 作为主要目标,将 收益最大化 转化为约束。具体地,我们引入参数 \(R_ 0\) 表示要求的最低预期收益,将原问题改写为: \[ \begin{aligned} \text{minimize} \quad & \sum_ {i=1}^n \sum_ {j=1}^n \sigma_ {ij} x_ i x_ j \\ \text{subject to} \quad & \sum_ {i=1}^n r_ i x_ i \ge R_ 0, \\ & \sum_ {i=1}^n x_ i = 1, \\ & x_ i \ge 0, \quad i=1,\dots,n. \end{aligned} \] 此时问题是一个 凸二次规划 (因为协方差矩阵 \(\Sigma\) 半正定)。但我们的目标是使用线性规划求解,因此需要进一步处理风险项。 步骤2:风险度量的线性化 二次形式 \(\sum \sum \sigma_ {ij} x_ i x_ j\) 不易直接线性化。一个常见替代方案是使用 绝对偏差 或 下半方差 等线性风险度量。这里我们采用 平均绝对偏差(MAD) 作为风险度量,它可以通过引入辅助变量转化为线性约束。 设历史收益率数据有 \(T\) 个时期,资产 \(i\) 在时期 \(t\) 的收益为 \(r_ {it}\),其样本平均为 \(\bar{r} i = \frac{1}{T} \sum {t=1}^T r_ {it}\)。则投资组合在时期 \(t\) 的收益偏差为: \[ d_ t = \sum_ {i=1}^n (r_ {it} - \bar{r}_ i) x_ i. \] MAD 定义为: \[ \text{MAD} = \frac{1}{T} \sum_ {t=1}^T |d_ t|. \] 优化问题可写为: \[ \begin{aligned} \text{minimize} \quad & \frac{1}{T} \sum_ {t=1}^T y_ t \\ \text{subject to} \quad & y_ t \ge d_ t, \quad t=1,\dots,T, \\ & y_ t \ge -d_ t, \quad t=1,\dots,T, \\ & \sum_ {i=1}^n \bar{r} i x_ i \ge R_ 0, \\ & \sum {i=1}^n x_ i = 1, \\ & x_ i \ge 0, \quad i=1,\dots,n, \\ & y_ t \ge 0, \quad t=1,\dots,T. \end{aligned} \] 其中 \(y_ t\) 是辅助变量,表示 \(|d_ t|\)。此时目标函数和约束均为线性,问题转化为 线性规划 。 步骤3:ε-约束法的实施 我们希望得到 收益-风险 权衡的帕累托前沿。ε-约束法的步骤如下: 确定收益范围 : 计算最大可能收益 \(R_ {\max}\)(通过求解线性规划:最大化 \(\sum \bar{r} i x_ i\),满足 \(\sum x_ i = 1, x_ i \ge 0\))。 计算最小可能收益 \(R {\min}\)(通过最小化同一目标,或取单个资产最小平均收益)。 生成收益约束值 : 在区间 \([ R_ {\min}, R_ {\max}]\) 内选取 \(K\) 个等间距点 \(R_ 0^{(k)}, k=1,\dots,K\)。每一个 \(R_ 0^{(k)}\) 对应一个风险约束值 ε 的设定(但此处我们将收益作为约束,风险作为目标,所以 ε 对应风险上限,而 \(R_ 0\) 对应收益下限)。更常见做法是固定风险上限 ε,但这里我们固定收益下限。 求解一系列线性规划 : 对每个 \(R_ 0^{(k)}\),求解如下线性规划: \[ \begin{aligned} \text{minimize} \quad & \frac{1}{T} \sum_ {t=1}^T y_ t \\ \text{subject to} \quad & y_ t \ge \sum_ {i=1}^n (r_ {it} - \bar{r} i) x_ i, \quad t=1,\dots,T, \\ & y_ t \ge -\sum {i=1}^n (r_ {it} - \bar{r} i) x_ i, \quad t=1,\dots,T, \\ & \sum {i=1}^n \bar{r} i x_ i \ge R_ 0^{(k)}, \\ & \sum {i=1}^n x_ i = 1, \\ & x_ i \ge 0, \quad i=1,\dots,n, \\ & y_ t \ge 0, \quad t=1,\dots,T. \end{aligned} \] 记解得的最小风险值为 \(MAD^* (R_ 0^{(k)})\)。 绘制帕累托前沿 : 以收益 \(R_ 0^{(k)}\) 为横坐标,风险 \(MAD^ (R_ 0^{(k)})\) 为纵坐标,将点 \((R_ 0^{(k)}, MAD^ (R_ 0^{(k)}))\) 连接,即得到近似的 帕累托前沿 。该前沿上的每个点都表示在给定收益下限下的最小可能风险。 步骤4:算法伪代码 步骤5:实例演示(数值简化) 假设有2种资产(n=2),3个历史时期(T=3): 收益率数据: 资产1: (5%, 2%, 4%) 资产2: (8%, 1%, 7%) 计算平均收益: \(\bar{r}_ 1 = (5+2+4)/3 = 3.67\%\), \(\bar{r}_ 2 = (8+1+7)/3 = 5.33\%\)。 最大收益:全投资产2,\(R_ {\max} = 5.33\%\)。 最小收益:全投资产1,\(R_ {\min} = 3.67\%\)。 取 K=3,收益下限 R0 取值:3.67%, 4.5%, 5.33%。 对 R0=4.5% 构建线性规划: 变量:x1, x2, y1, y2, y3。 收益约束:3.67 x1 + 5.33 x2 ≥ 4.5。 预算约束:x1 + x2 = 1。 偏差计算(时期1为例): d1 = (5-3.67) x1 + (8-5.33) x2 = 1.33 x1 + 2.67 x2。 约束:y1 ≥ d1, y1 ≥ -d1。类似构造时期2、3。 目标:min (y1+y2+y3)/3。 求解得:x1≈0.5, x2≈0.5, MAD≈某个值。 重复对其他 R0 求解,得到三个点,绘制帕累托前沿。 总结 通过将风险度量线性化(如使用MAD),并将收益目标转化为约束,我们可以用ε-约束法将多目标投资组合问题转化为一系列线性规划问题。求解这些线性规划,即可得到近似帕累托前沿,帮助投资者在收益与风险之间权衡选择。该方法避免了直接处理二次目标,计算效率高,且易于实现。