4. 全局优化算法:模拟退火、遗传算法与粒子群
说到光学系统优化,大部分时候局部优化就够用了。但有些情况——比如初始结构选得不好,或者系统本身有多个极值点——局部优化就会卡在某个坑里出不来。这时候就得请出全局优化算法了。
我个人习惯把这三种算法称为「三大金刚」:模拟退火、遗传算法、粒子群优化。它们各有脾气,也各有擅长。今天咱们一个一个聊。
4.1 模拟退火算法原理
模拟退火这个名字,听起来挺玄乎。其实说白了,就是模仿金属退火的过程——金属加热后慢慢冷却,内部原子会逐渐排列成能量最低的状态。
在光学优化里,我们把「能量」换成「评价函数值」。算法会以一定概率接受比当前更差的解,这个概率随着「温度」降低而减小。为什么要接受差解?为了跳出局部极值。
模拟退火的核心参数有三个:
| 参数 | 作用 | 典型取值 |
|---|---|---|
| 初始温度 T₀ | 控制早期接受差解的概率 | 100~1000 |
| 降温速率 α | 每次迭代温度乘的系数 | 0.85~0.99 |
| 终止温度 Tₑ | 低于此值停止搜索 | 0.01~1 |
伪代码其实很简单:
初始化温度 T = T₀
生成初始解 x
while T > Tₑ:
生成邻域解 x'
ΔE = f(x') - f(x)
if ΔE < 0:
x = x' # 接受更好解
else:
if random() < exp(-ΔE / T):
x = x' # 以概率接受差解
T = α * T # 降温
4.2 遗传算法在光学中的应用
遗传算法,顾名思义,模仿的是生物进化过程。选择、交叉、变异——这三板斧在光学设计里特别好使。
为什么?因为光学系统的参数空间往往是高维的、非连续的。遗传算法不需要梯度信息,只要你能写出评价函数,它就能搜。
我见过不少同行用遗传算法来优化非球面系数、自由曲面参数。尤其是自由曲面,参数多、耦合强,局部优化基本没用,遗传算法反而能给出不错的结果。
遗传算法的关键操作:
- 编码:把光学参数(曲率半径、厚度、非球面系数)编码成「染色体」。我习惯用实数编码,比二进制编码更直观。
- 选择:轮盘赌、锦标赛、精英保留。我个人偏爱精英保留——保证每一代最好的几个解不会丢失。
- 交叉:模拟生物基因交换。实数编码常用模拟二进制交叉(SBX)。
- 变异:随机扰动参数,防止种群过早收敛。
遗传算法在光学中的典型应用场景:
| 场景 | 说明 | 效果 |
|---|---|---|
| 初始结构搜索 | 从随机参数出发,找到可行解 | ★★★★★ |
| 非球面/自由曲面优化 | 高维参数,梯度法失效 | ★★★★☆ |
| 多目标权衡 | 像质、公差、成本同时考虑 | ★★★★☆ |
| 局部精调 | 收敛速度慢,不适合 | ★★☆☆☆ |
4.3 粒子群优化算法
粒子群优化(PSO)是我个人最喜欢的一种全局算法。为什么?因为它简单、参数少、收敛快。
想象一下:一群鸟在找食物。每只鸟知道自己当前的位置,也知道整个鸟群目前找到的最好位置。它们一边飞,一边向这两个方向靠拢。这就是PSO的核心思想。
在光学设计里,每个「粒子」就是一个候选解。粒子在参数空间里飞行,速度由三个因素决定:
- 惯性:保持原来的飞行方向
- 个体认知:飞向自己找到过的最好位置
- 社会认知:飞向整个群体找到的最好位置
速度更新公式:
v = w * v + c1 * r1 * (pbest - x) + c2 * r2 * (gbest - x)
x = x + v
其中 w 是惯性权重,c1、c2 是学习因子,r1、r2 是随机数。
PSO在光学里的优势很明显:
- 不需要梯度信息,适合非连续、不可导的评价函数
- 收敛速度快,通常几十代就能找到不错的结果
- 实现简单,代码量少
4.4 三种算法对比
你想想看,这三种算法到底选哪个?我个人的经验是:
| 维度 | 模拟退火 | 遗传算法 | 粒子群 |
|---|---|---|---|
| 收敛速度 | 慢 | 中等 | 快 |
| 全局搜索能力 | 强 | 强 | 中等 |
| 参数数量 | 少 | 多 | 少 |
| 实现难度 | 低 | 中 | 低 |
| 适合场景 | 粗调、初始搜索 | 高维、多目标 | 快速优化、中等维度 |
嗯,这里要注意:没有万能算法。我见过有人非要用遗传算法优化一个只有3个变量的系统,结果跑了半天还不如直接网格搜索。选算法要看问题规模、参数维度、计算资源。
4.5 全局优化算法知识体系
下面这张图总结了三种算法的核心逻辑和关系:
这张图把三种算法的核心机制、应用场景和选择建议串在了一起。你可以把它当作一个快速参考——下次遇到优化问题,先看看自己的需求落在哪个区域。