技術筆記

什么是 CMA-ES

[!QUESTION] User Cma es 算法的中文是什麼?

[!NOTE] Gemini CMA-ES 算法的中文是 协方差矩阵自适应进化策略。


什么是 CMA-ES?

CMA-ES (Covariance Matrix Adaptation Evolution Strategy) 是一种用于连续优化问题的随机优化算法。它属于进化策略 (Evolution Strategy, ES) 的范畴,通过模拟自然进化的过程来寻找函数的最优解。


主要特点:

  • 无导数(黑箱优化): CMA-ES 不需要计算目标函数的导数,因此非常适合处理无法求导或导数难以获得的复杂函数(“黑箱”问题)。

  • 自适应性: CMA-ES 最显著的特点是它能自适应地调整搜索策略。它维护一个多元高斯分布,并根据每次迭代中“优秀”解的信息来更新该分布的均值、标准差和协方差矩阵。

    • 均值 (Mean):决定了搜索分布的中心。

    • 标准差 (Standard Deviation):控制搜索步长(探索范围)。

    • 协方差矩阵 (Covariance Matrix):捕获了变量之间的相关性,并决定了搜索分布的形状和方向。通过调整协方差矩阵,算法可以有效地适应目标函数的“形状”和“方向”,从而更高效地找到最优解。

  • 高效: CMA-ES 在处理高维、多模态(有多个局部最优解)和非凸的优化问题时表现出良好的性能,并且通常只需要较少的个体(采样点)就能有效地探索搜索空间。


工作原理简述:

  1. 初始化: 设定一个初始的均值、标准差和协方差矩阵,定义一个初始的多元高斯分布。

  2. 采样: 从当前的高斯分布中生成一组新的候选解(个体)。

  3. 评估: 计算每个候选解在目标函数上的适应度(即目标函数值)。

  4. 选择和重组: 根据适应度对候选解进行排序,选择表现较好的个体。

  5. 更新分布参数: 利用这些表现良好的个体的信息,更新高斯分布的均值、标准差和协方差矩阵。这个更新过程是 CMA-ES 的核心,它使得搜索分布逐渐向最优解的方向移动,并调整其形状以更好地适应目标函数的地形。

  6. 迭代: 重复上述步骤,直到达到某个终止条件(例如,达到最大迭代次数,或找到满足特定精度要求的解)。

CMA-ES 因其强大的自适应能力和在复杂优化问题中的卓越表现,被广泛应用于机器学习、机器人学、工程设计等多个领域。

[!QUESTION] User 那麼跟種群演算法一樣嗎?

[!NOTE] Gemini 是的,CMA-ES 是一种种群算法。


什么是种群算法?

种群算法(Population-Based Algorithms)是一大类优化算法的总称,它们的核心思想是:在搜索过程中,不是只维护一个单一的候选解,而是同时维护一个包含多个候选解的“种群”或“群体”。这些候选解被称为“个体”。

种群算法通常通过以下方式进行优化:

  1. 初始化种群: 随机生成或以某种方式创建一组初始的个体。

  2. 评估: 计算种群中每个个体的适应度(即它们在优化问题中的表现)。

  3. 操作: 对种群中的个体进行一系列操作(如变异、交叉/重组、选择等),以产生新的个体。这些操作旨在探索搜索空间并找到更好的解。

  4. 更新种群: 根据新个体和旧个体的适应度,选择保留哪些个体进入下一代种群。

  5. 迭代: 重复上述步骤,直到满足某个终止条件。


CMA-ES 作为种群算法

CMA-ES 完全符合种群算法的定义。它:

  • 维护一个种群: 在每次迭代中,CMA-ES 从一个多元高斯分布中采样生成$\lambda$个新的候选解(个体),这 $\lambda$ 个解就构成了它的“种群”。

  • 基于种群信息更新: 它不像一些传统的优化算法那样只依赖于单个解的梯度信息,而是利用整个种群中“优秀”个体的信息来更新高斯分布的参数(均值、标准差和协方差矩阵)。这个协方差矩阵的自适应调整,正是 CMA-ES 高效的秘诀,因为它能学习目标函数的几何形状。

  • 模拟进化过程: 尽管它没有像遗传算法那样明确的“交叉”操作,但通过对选择出的优秀个体进行加权重组来更新均值,这可以看作是一种隐式的重组形式。而通过协方差矩阵和步长的调整,则实现了类似“变异”的效果。

简而言之,CMA-ES 属于更广泛的进化算法(Evolutionary Algorithms, EAs)家族,而进化算法本身就是最典型的种群算法之一。其他常见的种群算法包括:

  • 遗传算法 (Genetic Algorithms, GAs)

  • 粒子群优化 (Particle Swarm Optimization, PSO)

  • 差分进化 (Differential Evolution, DE)

所以,可以肯定地说,CMA-ES 是一种基于种群的优化算法。

[!QUESTION] User 那麼跟 鷹群掠食演算法or 螞蟻演算法 or 模擬退火法,tabu search,有什麼蕾絲和不一樣的地方嗎?

[!NOTE] Gemini


將 CMA-ES 與 鷹群掠食演算法 (Eagle Perching Optimizer, EPO)、螞蟻演算法 (Ant Colony Optimization, ACO)、模擬退火法 (Simulated Annealing, SA) 和 禁忌搜索 (Tabu Search, TS) 進行比較,我們會發現它們都是元启发式算法 (Metaheuristics),旨在解決複雜的優化問題。它們之間有相似之處,但核心機制和適用問題類型上存在顯著差異。


共同之處 (相似之處)

  • 元启发式算法: 都屬於元启发式算法的範疇,不保證找到全局最優解,但在合理時間內能找到高質量的近似解。

  • 靈感來源: 大多數都從自然現象中獲得靈感(如進化、鳥類捕食、螞蟻覓食、物理退火)。Tabu Search 則更側重於記憶和局部搜索。

  • 適用於複雜問題: 都能處理傳統方法難以解決的、無導數、非凸、多模態等複雜優化問題。

  • 探索與開發: 都需要平衡探索(廣泛搜索)和開發(精細搜索)能力,以避免陷入局部最優。


主要差異

以下表格概述了它們的核心機制和一些關鍵區別:

特性/算法 CMA-ES (协方差矩阵自适应进化策略) 鷹群掠食演算法 (EPO) 螞蟻演算法 (ACO) 模擬退火法 (SA) 禁忌搜索 (TS)
類別 种群算法 (进化策略) 种群算法 (仿生群智能) 种群算法 (仿生群智能) 單點搜索 (局部搜索) 單點搜索 (局部搜索)
核心機制 自适应协方差矩阵,调整高斯分布的均值、方差和方向。 模拟鹰的捕食行为(盘旋、俯冲、栖息)。 模拟蚂蚁通过信息素寻找最短路径。 模拟物理退火过程,接受差解的概率随温度降低。 使用记忆(禁忌列表)避免重复搜索,指导局部搜索。
搜索空間 連續優化 連續優化 離散優化 (尤其圖論問題) 連續或離散 連續或離散
解的數量 多個解 (种群) 多個解 (种群) 多個解 (蚂蚁) 單一解 單一解
記憶/學習 通過更新协方差矩阵学习解空间几何。 通过个体位置和速度更新。 通过信息素浓度学习路径信息。 主要通过温度控制接受策略。 通过禁忌列表和激励机制学习。
對導數要求 無 (黑箱優化) 無 無 無 無
探索/開發平衡 自适应强,通过协方差矩阵动态调整。 通过不同行为模式切换。 信息素决定路径,概率性选择。 温度控制,高温利于探索,低温利于开发。 禁忌列表限制探索,邻域搜索进行开发。
典型應用 机器学习超参数调优、机器人控制、工程设计。 函數優化、工程優化。 旅行商問題 (TSP)、車輛路徑問題 (VRP)、任務調度。 排程、組合優化、函數優化。 排程、路由、分區問題。

匯出到試算表


詳細比較

  1. CMA-ES vs. 鷹群掠食演算法 (EPO) & 螞蟻演算法 (ACO)

    • 相同點: 都是種群算法,同時維護多個候選解。

    • 不同點:

      • CMA-ES 專注於連續空間優化,通過統計學方法 (高斯分佈的均值和協方差矩陣) 來學習和適應目標函數的幾何形狀。它的核心是自適應地調整搜索分佈。

      • EPO 和 ACO 則更傾向於仿生學範式,直接模擬生物群體的行為模式(鷹的捕食、螞蟻的覓食)。

      • ACO 尤其擅長解決離散優化問題,特別是圖論中的路徑尋優問題,它通過信息素這一特殊的共享信息來指導搜索。

      • EPO 較新,旨在模擬鷹的特定行為,通常也應用於連續優化。

  2. CMA-ES vs. 模擬退火法 (SA) & 禁忌搜索 (TS)

    • 相同點: 都是元启发式算法,能處理複雜問題。

    • 不同點:

      • CMA-ES 是種群算法,同時考慮多個解。而 SA 和 TS 則是典型的單點搜索算法,它們每次迭代只維護和改進一個當前解。

      • SA 最大的特點是其接受策略:它在一定概率下接受比當前解更差的解,這有助於跳出局部最優。這個概率由“溫度”參數控制,隨迭代逐漸降低。

      • TS 的核心是記憶機制 (禁忌列表),它記錄最近訪問過的一些解或操作,並在一定時間內禁止再次訪問它們,以避免陷入循環和重複搜索已經探索過的部分。它也通常利用鄰域搜索來產生新的候選解。

      • CMA-ES 通過調整高斯分佈的協方差矩陣,實現了更為複雜和自適應的“跳出”局部最優的能力,因為它可以改變搜索方向和形狀,而不是簡單地隨機跳躍。


總結

CMA-ES 在連續優化問題中表現出色,特別是當目標函數是“黑箱”且導數難以獲取時,其強大的自適應能力 (通過協方差矩陣學習) 是其獨特優勢。

鷹群掠食演算法 和 螞蟻演算法 屬於群智能算法,分別模擬特定生物行為,其中 ACO 在離散路徑問題上表現突出。

模擬退火法 和 禁忌搜索 則是更基礎的單點搜索算法,各自使用“接受差解”和“記憶”的策略來應對局部最優問題。

選擇哪種算法取決於具體的問題類型(連續/離散、維度)、目標函數的特性(有導數/無導數、多模態)、以及對計算資源和精度的要求。

[!QUESTION] User 我要寫一個class 去 run CMA-ES ,用來 TPRDAnalyze class 的 參數,請推薦一個 class name

[!NOTE] Gemini


您想要為您的 TPRDAnalyze class 的參數跑 CMA-ES,需要一個搭配的 class name。

我推薦的 class name 是:

TPRDParamOptimizer


為什麼推薦這個名字?

  • TPRD: 清楚地指明了它所關聯的對象是 TPRDAnalyze。

  • Param (Parameters): 表明這個 class 的主要功能是處理或優化參數。

  • Optimizer: 直接點出了它使用優化算法(CMA-ES 是一種優化器)來尋找最佳參數集。

這個名稱簡潔明瞭,能一眼看出它的用途,並與您的 TPRDAnalyze class 形成邏輯上的連結。


在 GitHub 看原文