Optimization Algorithms 优化算法

PSO 粒子群算法 Partical Swarm Optimization

参考:

要点

  1. 速度 \[ V_{i+1} = w V_i + C_1 (P_{i,\text{best}} - X_i) + C_2 (G_{i,\text{best}} - X_i) \]

    注释:

    • Pi –> 粒子
    • Gi –> 全局
    • 权重: w, C1, C2
    • i: 第 i 次迭代
    • i+1: i+1 次迭代
    • 粒子历史最优: Pi,best
    • 全局最优:Gi,best
  2. 位置 \[ X_{i+1} = X_i + V_{i+1} \] 注释:

    • 这里省略了时间 t = 1
  3. 适应度函数

    • 类似贝叶斯优化中的黑盒函数 –> cost function
    • 最大化需要变成 Fitness = - 目标函数 (取负值)
  4. 种群规模(粒子数量)

    • 20~100 or 1000
  5. 迭代次数 = 100~ 1000, or 4000(复杂问题)

Vs 贝叶斯

优化速度,没有贝叶斯快速,更容易被困在局部最优,后期优化速度下降

CMA-ES(协方差矩阵自适应进化策略)

ref:

特点

  • 出色的全局搜索能力:作为进化算法,它善于逃离局部最优解,找到全局最优解
  • 适合高维 > 贝叶斯优化
  • 需要样本量 > 贝叶斯优化

RUN 算法

ref:

龙格-库塔优化器(RUN)是一种基于 数学原理 的无隐喻元启发式优化算法

不像 ACOR 连续域蚁群优化算法、遗传优化算法等是仿生学算法,RUN 算法时完全基于数学逻辑设计出来的。类似贝叶斯优化也包含了 Explore 探索 Vs Exploitation 开发机制

ACOR 优化算法

ref:

ACOR(Ant Colony Optimization for Continuous Domains,连续域蚁群优化) 是由 Krzysztof Socha 和 Marco Dorigo 于 2008 年提出的一种元启发式优化算法。它的核心贡献是将最初为离散组合优化问题设计的蚁群优化算法(ACO),成功且自然地扩展到了连续域优化问题中

维护一个优质解的档案,根据解的质量分配权重,通过高斯核等概率模型生成新解

遗传优化算法 Genetic Algorithm

ref:

概念

  1. 染色体(个体)
  2. 编码
  3. 种群
  4. 适应度(cost function)
  5. 选择

    • 轮盘赌选择

      • 随机选择 n1 个个体保留
    • 锦标赛

      1. 随机选择 n2 个个体
      2. 然后通过适应度选出最优的保留,即 cost function, 黑盒函数选择
    • 精英选择

      • 保留当前迭代最优解(个体),避免最优解丢失,数量可以是 n3, 比如 1~2
  6. 交叉(基因重组) –> 对应开采(Exploitation)

    • 仿造生物,染色体交叉,基因交换
    • 特点:本身不创建基因(x),比如:

      假设参数有X 有三个维度 x0, x1, x2
      现在从种群中选择2个优秀个体
      个体A: X_A [12, 0.5, 100]
      个体 B: X_B [15, 0.8, 80]
      
      交叉:
      生成新个体 C: X_C [12, 0.8, 80]
      这个过程中没有创建新的 x0, x1, x2, 他们是通过“交叉”,
      从 A, B 两个个体中继承的基因
      
  7. 变异 –> 对应探索(Explore)

    • 随机创新
    • 低概率(1%~5%)对新生个体引入随机扰动,即引入基因变异、新的基因
    • 保持种群多样性
    • 避免陷入局部最优

整体流程

1. 初始化
2. 选择最优个体 n3 个,直接进入下一轮(不做变异,交叉)
3. 选择 -> 交叉 -> 变异 --> 个体 --> 下一轮
   - 选择方法/策略: 锦标赛、轮盘赌等
   - 选择的个体 n1 --> 先交叉 --> 2*n1 个个体 --> 变异
   - 这是一个循环生成过程,指导生成了足够数量(种群大小)的新个体,然后停止生成
4. 执行,获取每一个点的 fitness (适应度)

一个超参数设置案例

# 目标:定义待优化的问题、解的编码方式以及算法运行的所有超参数

问题定义:
    目标函数: fitness_func(individual) -> float  # 评估个体优劣,返回值越大越好
    编码方式: 例如,二进制字符串、实数向量、排列等
    约束条件: 变量的取值范围等

超参数配置:
    种群大小: population_size = 50-200
    最大迭代代数: max_generations = 100-1000
    交叉概率: crossover_probability = 0.7-0.9
    变异概率: mutation_probability = 0.01-0.1
    选择策略: 如锦标赛选择(tournament)、轮盘赌(roulette)等
    精英数量: elitism_count = 1-2  # 每代直接保留的最优个体数