【优化算法】协方差矩阵自适应进化策略(Covariance Matrix Adaptation Evolution Strategy,CMA-ES)

文章目录

    • [1 算法解析](#1 算法解析)
      • [1.1 核心原理](#1.1 核心原理)
      • [1.2 算法核心步骤](#1.2 算法核心步骤)
    • [2 参数说明](#2 参数说明)
    • [3. 核心优势](#3. 核心优势)
    • [4 具体示例](#4 具体示例)

CMA-ES(Covariance Matrix Adaptation Evolution Strategy)算法是一种无导数、基于多元正态分布 的迭代优化方法,通过自适应地调整搜索分布的均值、协方差矩阵和步长,能够高效地解决非线性、非凸的连续优化问题。

  • 算法以最大似然和演化路径为两大核心思想,在每一代中生成 λ 个候选解,依据排序选取 μ 个优秀个体,并利用它们来更新搜索分布参数,实现二阶信息的隐式估计和迅速收敛。

1 算法解析

1.1 核心原理

  • 最大似然原则 :通过调整均值 m m m 和协方差矩阵 C C C,使得先前成功(即具有较好目标值)的样本和搜索步长在新的分布下具有更高的采样概率,相当于对成功样本的增量式最优拟合。
  • 演化路径(Evolution Paths) :算法维护两条路径------协方差更新路径 p c p_c pc 和步长控制路径 p σ p_\sigma pσ
    • 当连续步长朝同一方向时,路径长度变长,反映了搜索方向上的相关性;
    • 演化路径被用于加速协方差更新以及自适应步长调整,防止过早收敛并提升收敛速度。

1.2 算法核心步骤

  1. 初始化

    • 设定维度 n n n、初始均值 m 0 m_0 m0、初始步长标准差 σ 0 \sigma_0 σ0、种群规模 λ \lambda λ、精英数 μ \mu μ 及权重 { w i } \{w_i\} {wi}。
    • 初始协方差矩阵通常取单位矩阵 C 0 = I n C_0 = I_n C0=In。
  2. 采样(Sampling)

    x k ( t + 1 ) = m ( t ) + σ ( t )   N ( 0 , C ( t ) ) , k = 1 , ... , λ x_k^{(t+1)} = m^{(t)} + \sigma^{(t)} \, \mathcal{N}(0, C^{(t)}),\quad k=1,\dots,\lambda xk(t+1)=m(t)+σ(t)N(0,C(t)),k=1,...,λ

  3. 排序与加权重组(Recombination) :按 f ( x ) f(x) f(x) 从小到大排序,选取前 μ 个并按权重 w i w_i wi 计算新的均值

    m ( t + 1 ) = ∑ i = 1 μ w i   x i : λ ( t + 1 ) m^{(t+1)} = \sum_{i=1}^{\mu} w_i \, x_{i:\lambda}^{(t+1)} m(t+1)=i=1∑μwixi:λ(t+1)

  4. 更新演化路径

  • 位置路径: p c ← ( 1 − c c ) p c + c c ( 2 − c c ) μ w   m ( t + 1 ) − m ( t ) σ ( t ) p_c \leftarrow (1-c_c)p_c + \sqrt{c_c(2-c_c)\mu_w}\,\frac{m^{(t+1)}-m^{(t)}}{\sigma^{(t)}} pc←(1−cc)pc+cc(2−cc)μw σ(t)m(t+1)−m(t)
  • 步长路径:
    p σ ← ( 1 − c σ ) p σ + c σ ( 2 − c σ ) μ w   C ( t ) − 1 / 2 m ( t + 1 ) − m ( t ) σ ( t ) p_\sigma \leftarrow (1-c_\sigma)p_\sigma + \sqrt{c_\sigma(2-c_\sigma)\mu_w}\,C^{(t)^{-1/2}}\frac{m^{(t+1)}-m^{(t)}}{\sigma^{(t)}} pσ←(1−cσ)pσ+cσ(2−cσ)μw C(t)−1/2σ(t)m(t+1)−m(t)
  1. 协方差矩阵更新
    C ( t + 1 ) = ( 1 − c 1 − c μ ) C ( t ) + c 1   p c p c T + c μ ∑ i = 1 μ w i   y i : λ y i : λ T C^{(t+1)} = (1-c_1-c_\mu)C^{(t)} + c_1\,p_c p_c^T + c_\mu\sum_{i=1}^{\mu} w_i\,y_{i:\lambda}y_{i:\lambda}^T C(t+1)=(1−c1−cμ)C(t)+c1pcpcT+cμi=1∑μwiyi:λyi:λT

    其中 y i : λ = ( x i : λ − m ( t ) ) / σ ( t ) y_{i:\lambda}=(x_{i:\lambda}-m^{(t)})/\sigma^{(t)} yi:λ=(xi:λ−m(t))/σ(t)。

  2. 步长控制(Step-Size Control)

    σ ( t + 1 ) = σ ( t ) exp ⁡ ( c σ d σ ( ∥ p σ ∥ E [ ∥ N ( 0 , I ) ∥ ] − 1 ) ) \sigma^{(t+1)} = \sigma^{(t)}\exp\Big(\frac{c_\sigma}{d_\sigma}\big(\frac{\|p_\sigma\|}{E[\|\mathcal{N}(0,I)\|]}-1\big)\Big) σ(t+1)=σ(t)exp(dσcσ(E[∥N(0,I)∥]∥pσ∥−1))

    其中 E [ ∥ N ( 0 , I ) ∥ ] E[\|\mathcal{N}(0,I)\|] E[∥N(0,I)∥] 为期望长度。

2 参数说明

参数 含义 默认/约定
n n n 决策变量维度 ---
λ \lambda λ 每代样本数(子代) ≈ 4 + 3 ln ⁡ n \approx 4+3\ln n ≈4+3lnn
μ \mu μ 父代个体数( μ < λ \mu < \lambda μ<λ) ⌊ λ / 2 ⌋ \lfloor\lambda/2\rfloor ⌊λ/2⌋
w i w_i wi 父代重组权重,满足 ∑ w i = 1 \sum w_i=1 ∑wi=1,通常按对数划分 w i ∝ ln ⁡ ( μ + 1 ) − ln ⁡ ( i ) w_i \propto \ln(\mu+1)-\ln(i) wi∝ln(μ+1)−ln(i)
m m m 搜索分布的均值 初始化为问题起始点
σ \sigma σ 步长(全局标准差) 依问题设定,一般为可行域尺度
C C C 协方差矩阵 初始为单位矩阵
c c c_c cc, c σ c_\sigma cσ 演化路径的衰减因子 c c ≈ 4 n + 4 c_c\approx \tfrac{4}{n+4} cc≈n+44, c σ ≈ μ w + 2 n + μ w + 5 c_\sigma\approx\tfrac{\mu_w+2}{n+\mu_w+5} cσ≈n+μw+5μw+2
c 1 c_1 c1, c μ c_\mu cμ 协方差更新学习率 c 1 ≈ 2 ( n + 1.3 ) 2 + μ w c_1\approx\tfrac{2}{(n+1.3)^2+\mu_w} c1≈(n+1.3)2+μw2, c μ = min ⁡ ( 1 − c 1 , μ w − 2 + 1 / μ w ( n + 2 ) 2 + μ w ) c_\mu=\min\big(1-c_1,\tfrac{\mu_w-2+1/\mu_w}{(n+2)^2+\mu_w}\big) cμ=min(1−c1,(n+2)2+μwμw−2+1/μw)
d σ d_\sigma dσ 步长阻尼因子 d σ = 1 + c σ + n − 0.5 d_\sigma=1+c_\sigma+n^{-0.5} dσ=1+cσ+n−0.5

注: μ w = ∑ i = 1 μ w i 2 \mu_w=\sum_{i=1}^\mu w_i^2 μw=∑i=1μwi2 为有效父代大小。

3. 核心优势

  1. 无梯度要求:
    不依赖目标函数的梯度信息,适用于黑箱优化问题(如非凸、多峰、不可导函数)。
  2. 自适应搜索方向:
    通过协方差矩阵的动态调整,算法能够自动适应目标函数的几何特性(如旋转、缩放等)。
  3. 鲁棒性:
    对噪声环境(如随机目标函数)具有较强的鲁棒性。

4 具体示例

以优化 n 维球函数

f ( x ) = ∑ i = 1 n x i 2 f(x)=\sum_{i=1}^n x_i^2 f(x)=i=1∑nxi2

为例,取 n = 10 n=10 n=10,初始均值 m 0 = ( 5 , ... , 5 ) m^0=(5,\dots,5) m0=(5,...,5),初始步长 σ 0 = 2 \sigma^0=2 σ0=2,则:

  1. 初始化
    m = ( 5 , 5 , ... , 5 ) , σ = 2 , C = I 10 m=(5,5,\dots,5),\ \sigma=2,\ C=I_{10} m=(5,5,...,5), σ=2, C=I10。

  2. 迭代示例(第一代):

    • 采样 λ≈4+3ln10≈11 个样本,并计算对应的 f 值;
    • 按 f 排序后选 μ=5 个父代,计算加权均值;
    • 更新 p c p_c pc、 p σ p_σ pσ、 C C C 和 σ σ σ;
    • 可观察到均值向原点移动,σ 逐渐缩小。

经过数十至数百代迭代后,均值 m m m 会收敛至原点,且 f ( m ) → 0 f(m)\to0 f(m)→0。

相关推荐
S01d13r5 小时前
LeetCode 解题思路 48(编辑距离、只出现一次的数字)
算法·leetcode·职场和发展
C_Liu_5 小时前
C语言:深入理解指针(5)
java·c语言·算法
small_wh1te_coder5 小时前
从经典力扣题发掘DFS与记忆化搜索的本质 -从矩阵最长递增路径入手 一步步探究dfs思维优化与编程深度思考
c语言·数据结构·c++·stm32·算法·leetcode·深度优先
枫景Maple5 小时前
LeetCode 45. 跳跃游戏 II(中等)
算法·leetcode
এ᭄画画的北北5 小时前
力扣-236.二叉树的最近公共祖先
算法·leetcode
Magnum Lehar6 小时前
3d游戏引擎的math矩阵实现
线性代数·矩阵·游戏引擎
z人间防沉迷k7 小时前
堆(Heap)
开发语言·数据结构·笔记·python·算法
不二狗7 小时前
每日算法 -【Swift 算法】Two Sum 问题:从暴力解法到最优解法的演进
开发语言·算法·swift
LabVIEW开发7 小时前
LabVIEW中样条插值实现及应用
算法·labview知识
LabVIEW开发7 小时前
LabVIEW机械振动信号分析与故障诊断
算法·labview知识·labview开发案例