自适应协方差矩阵调整演化策略(CMA-ES)基础题
字数 2971 2025-12-02 13:51:47
自适应协方差矩阵调整演化策略(CMA-ES)基础题
题目描述
考虑一个二维非线性优化问题:
最小化目标函数 \(f(x_1, x_2) = (x_1 - 2)^4 + (x_1 - 2x_2)^2\),
其中 \(x_1, x_2 \in \mathbb{R}\)。使用自适应协方差矩阵调整演化策略(CMA-ES)求解该问题,初始点设为 \(x^{(0)} = (0, 0)^T\),初始步长 \(\sigma^{(0)} = 1\),种群大小 \(\lambda = 4\)。
解题过程
CMA-ES是一种基于种群的随机优化算法,通过自适应调整搜索分布的协方差矩阵来逼近目标函数的局部结构。以下是详细步骤:
-
初始化参数
- 设置初始分布均值 \(m^{(0)} = x^{(0)} = (0, 0)^T\)。
- 初始协方差矩阵 \(C^{(0)} = I\)(单位矩阵)。
- 初始步长 \(\sigma^{(0)} = 1\)。
- 选择种群大小 \(\lambda = 4\),父代数量 \(\mu = \lfloor \lambda/2 \rfloor = 2\)。
- 设置权重 \(w_i = \frac{\ln(\mu+0.5) - \ln(i)}{\sum_{j=1}^{\mu} \ln(\mu+0.5) - \ln(j)}\)(用于重组),例如 \(w_1 \approx 0.85, w_2 \approx 0.15\)。
- 初始化进化路径 \(p_\sigma^{(0)} = 0, p_c^{(0)} = 0\)。
-
生成新种群(第\(g\)代)
- 对每个个体 \(k = 1, \dots, \lambda\):
- 采样随机向量 \(z_k \sim \mathcal{N}(0, I)\)(独立同分布的标准正态分布)。
- 计算 \(y_k = \sigma^{(g)} \cdot B^{(g)} D^{(g)} z_k\),其中 \(C^{(g)} = B^{(g)} (D^{(g)})^2 (B^{(g)})^T\) 是协方差矩阵的特征分解。
- 生成个体 \(x_k = m^{(g)} + y_k\)。
- 示例(简化):
假设 \(z_1 = (0.5, -0.3)^T, z_2 = (-0.2, 0.7)^T, z_3 = (0.1, 0.4)^T, z_4 = (-0.6, -0.1)^T\)。
由于 \(C^{(0)} = I\),有 \(B^{(0)} = I, D^{(0)} = I\),因此 \(y_k = z_k\)。
得到种群:
\(x_1 = (0.5, -0.3)^T, x_2 = (-0.2, 0.7)^T, x_3 = (0.1, 0.4)^T, x_4 = (-0.6, -0.1)^T\)。
- 对每个个体 \(k = 1, \dots, \lambda\):
-
评估与排序
- 计算每个个体的目标函数值:
\(f(x_1) = (0.5-2)^4 + (0.5 - 2\cdot(-0.3))^2 \approx 5.06 + 1.21 = 6.27\),
\(f(x_2) \approx 38.94 + 5.76 = 44.70\),
\(f(x_3) \approx 28.74 + 2.89 = 31.63\),
\(f(x_4) \approx 45.70 + 0.16 = 45.86\)。 - 按 \(f(x)\) 升序排序:\(x_1, x_3, x_2, x_4\)。
- 选择前 \(\mu = 2\) 个最优个体 \(x_1, x_3\) 作为父代。
- 计算每个个体的目标函数值:
-
更新分布均值
- 新均值 \(m^{(g+1)} = \sum_{i=1}^{\mu} w_i x_{i:\lambda}\),其中 \(x_{i:\lambda}\) 是第 \(i\) 优个体。
- 计算:\(m^{(1)} = 0.85 \cdot (0.5, -0.3)^T + 0.15 \cdot (0.1, 0.4)^T \approx (0.44, -0.21)^T\)。
-
更新进化路径和协方差矩阵
- 步长控制路径 \(p_\sigma\):
\(p_\sigma^{(g+1)} = (1-c_\sigma) p_\sigma^{(g)} + \sqrt{c_\sigma(2-c_\sigma)\mu_{\text{eff}}} \cdot \frac{m^{(g+1)} - m^{(g)}}{\sigma^{(g)}}\),
其中 \(c_\sigma \approx 0.3\) 为学习率,\(\mu_{\text{eff}} = 1/\sum w_i^2 \approx 1.25\)。
初始 \(p_\sigma^{(0)} = 0\),计算 \(p_\sigma^{(1)} \approx 0.77 \cdot (0.44, -0.21)^T \approx (0.34, -0.16)^T\)。 - 协方差矩阵更新:
- 路径 \(p_c^{(g+1)}\) 更新类似 \(p_\sigma\),但权重不同。
- 协方差矩阵 \(C^{(g+1)} = (1-c_1-c_\mu) C^{(g)} + c_1 p_c^{(g+1)} (p_c^{(g+1)})^T + c_\mu \sum_{i=1}^{\mu} w_i y_{i:\lambda} y_{i:\lambda}^T\),
其中 \(c_1 \approx 0.01, c_\mu \approx 0.1\) 为学习率。
第一次迭代中,\(C^{(1)}\) 接近单位矩阵但略有调整。
- 步长控制路径 \(p_\sigma\):
-
更新步长 \(\sigma\)
- 根据 \(p_\sigma\) 的模长调整:
\(\sigma^{(g+1)} = \sigma^{(g)} \exp\left( \frac{c_\sigma}{d_\sigma} \left( \frac{\|p_\sigma^{(g+1)}\|}{\mathbb{E}[\|\mathcal{N}(0,I)\|]} - 1 \right) \right)\),
其中 \(d_\sigma \approx 1\) 为阻尼系数。若 \(\|p_\sigma\|\) 大于期望值(表示路径较长),则增大 \(\sigma\) 以加速搜索。
- 根据 \(p_\sigma\) 的模长调整:
-
迭代与终止
- 重复步骤2-6,直到步长 \(\sigma\) 足够小或达到最大代数。
- 最终均值 \(m\) 会收敛到近优解 \((2, 1)^T\)(理论最优解为 \(f(2,1)=0\))。
关键点
- CMA-ES通过协方差矩阵自适应学习目标函数的等高线形状,使搜索方向沿梯度下降方向。
- 进化路径记录连续代的移动方向,避免过早收敛。
- 本题中,算法预计在10-20代内收敛到高精度解。