当前位置: 首页 > web >正文

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

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(1cc)pc+cc(2cc)μ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σ(1cσ)pσ+cσ(2cσ)μ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)=(1c1cμ)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) wiln(μ+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} ccn+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(1c1,(n+2)2+μwμw2+1/μw)
d σ d_\sigma dσ步长阻尼因子 d σ = 1 + c σ + n − 0.5 d_\sigma=1+c_\sigma+n^{-0.5} dσ=1+cσ+n0.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=1nxi2

为例,取 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

http://www.xdnf.cn/news/6409.html

相关文章:

  • 35页AI应用PPT《DeepSeek如何赋能职场应用》DeepSeek本地化部署与应用案例合集
  • React19源码系列之 Diff算法
  • 国产数据库工具突围:SQLynx如何解决Navicat的三大痛点?深度体验报告
  • OpenCV计算机视觉实战(5)——图像基础操作全解析
  • Apache RocketMQ ACL 2.0 全新升级
  • LabVIEW的CAN通讯测试程序
  • 第 83 场周赛:较大分组的位置、隐藏个人信息、连续整数求和、统计子串中的唯一字符
  • 2025长三角杯数学建模A题思路模型代码:智能手机产品设计优化与定价问题
  • 增强 HTNN 服务网格功能:基于 Istio 的BasicAuth 与 ACL 插件开发实战
  • 本地部署Firecrawl+Dify调用踩坑记录
  • 由于复制槽导致wal大量堆积的处理方案
  • LeetCode LCR 015. 找到字符串中所有字母异位词 (Java)
  • 机器学习第十二讲:特征选择 → 选最重要的考试科目做录取判断
  • React 第四十二节 Router 中useLoaderData的用途详解
  • 【常用算法:排序篇】7.算法魔法与面试秘籍:从趣味排序到实战通关
  • 架空防静电地板材质全解析:选对材质,守护精密空间的“安全卫士”
  • 常用的关系性统计方法
  • 【物联网】基于树莓派的物联网开发【4】——WIFI+SSH远程登录树莓派
  • 2505C++,py和go调用雅兰亭库的协程工具
  • 2025年渗透测试面试题总结-阿里云[实习]阿里云安全-安全工程师(题目+回答)
  • 2025认证杯第二阶段数学建模B题:谣言在社交网络上的传播思路+模型+代码
  • 贝叶斯优化Transformer融合支持向量机多变量回归预测,附相关性气泡图、散点密度图,Matlab实现
  • 【Python 正则表达式】
  • PostgreSQL 联合索引生效条件
  • 揭秘LLM:矩阵运算揭秘LLM单词生成机制
  • C++11多线程thread、原子变量
  • Kafka 中过多的 topic 导致整体上性能变慢的原因
  • Spark--RDD中的转换算子
  • Node.js
  • Miniconda介绍介绍和使用