第四章 评价函数与优化:从“看得见”到“算得清”
好,咱们进入正题。前面几章我们搭好了镜头结构,也学会了怎么“看”像质。但设计不是光靠眼睛看的——你得让软件自己去找最优解。这就要靠评价函数和优化器了。
说白了,评价函数就是给镜头打分的标准。优化器就是根据这个分数,不断调整参数,直到分数最好。我刚开始学Zemax时,总觉得这步很玄乎。后来才明白,其实没那么复杂。
4.1 默认评价函数:你的第一把尺
打开Zemax,点开评价函数编辑器(Merit Function Editor),你会看到一个空白表格。别慌,先按一下 Ctrl+W 或者点菜单里的“Default Merit Function”。
弹出来的对话框里,有几个选项需要你选:
- 优化类型:RMS(均方根)还是PTV(峰谷值)?我个人习惯选RMS,因为它对整体像质更敏感。PTV只看最差的那根光线,有时候会忽略整体表现。
- 参考点:质心(Centroid)还是主光线(Chief Ray)?这里有个小窍门——如果你做的是成像系统,选质心;如果是激光系统,选主光线。为什么?因为成像系统关心的是能量集中度,激光系统关心的是指向精度。
- 光线密度:默认是3环6臂。嗯,这个够用。但如果你做的是高精度系统,我建议加到6环12臂。代价是优化速度会慢一些。
核心要点:默认评价函数是给新手用的,也是给老手打基础的。它自动生成一堆操作数,包括光线追迹、像差计算、边界条件等。你只需要告诉它“我要优化什么”就行。
点击OK后,你会看到编辑器里瞬间多了一堆行。别被吓到——这些都是Zemax自动生成的。最上面几行通常是 DMFS(默认评价函数起始标记),然后是各种 TRAC(光线追迹)和 ABSO(像差计算)。
4.2 操作数详解:自己动手,丰衣足食
默认评价函数虽然方便,但有时候不够用。比如你想控制某个镜片的中心厚度不能太薄,或者想让焦距精确到某个值。这时候就得自己写操作数了。
操作数(Operand)是评价函数的基本单元。每个操作数代表一个约束或目标。常用的操作数有这几类:
| 类别 | 操作数 | 作用 | 我常用的场景 |
|---|---|---|---|
| 像差类 | SPHA / COMA / ASTI | 分别控制球差、彗差、像散 | 校正特定像差时,直接设目标为0 |
| 焦距类 | EFFL | 控制有效焦距 | 设计定焦镜头时,设为目标值±公差 |
| 尺寸类 | TOTR / CTGT | 控制总长/中心厚度 | 防止镜片太薄加工不了 |
| 光线类 | REAY / RAGX / RAID | 控制光线在像面的Y坐标/角度/入射角 | 控制出射角度或像高 |
| 边界类 | MNCT / MXCT | 最小/最大中心厚度 | 避免镜片边缘太薄 |
我的小习惯:每次新建操作数时,我都会在“Target”列填上目标值,在“Weight”列填上权重。权重越大,优化器越重视这个约束。一般像差类权重设1,尺寸类设0.1就够了。别把所有权重都设成1——优化器会顾此失彼。
举个例子。假设你要控制系统总长不超过100mm,可以这样写:
操作数: TOTR
目标值: 100
权重: 1
类型: 小于等于(在优化里通过设置目标值和权重实现)
嗯,这里要注意:Zemax的操作数默认是“等于”目标值。如果你想约束“小于等于”或“大于等于”,得用 OPGT 或 OPLT 配合使用。我刚开始也搞混过,后来发现直接设目标值+权重,优化器会自动平衡。
4.3 局部优化与全局优化:两条腿走路
优化器分两种:局部优化和全局优化。它们的关系,有点像“爬山”和“跳伞”。
局部优化(Local Optimization):从当前起点出发,沿着梯度下降方向找最近的极值点。优点是快,缺点是容易掉进局部最优。就像爬山时只盯着脚下的路,可能爬到一个小山头就停了,没看到旁边更高的山峰。
全局优化(Global Optimization):在参数空间里随机采样,尝试不同的起点,然后分别做局部优化。最后比较所有结果,选出最好的。优点是能找到全局最优,缺点是慢。
我的建议是:先用全局优化跑一遍,找到几个不错的候选解。然后挑一个最好的,用局部优化精调。这样既不会错过好解,又能保证精度。
避坑指南:我曾经在一个项目里直接跑全局优化,跑了整整一夜。第二天一看,结果还不如我手动调的好。后来才发现,全局优化的参数范围设得太大了,导致采样点太稀疏。记住:全局优化的参数范围要合理,别让优化器在不可能的区域浪费时间。
4.4 锤形优化:最后的杀手锏
锤形优化(Hammer Optimization)是Zemax里一个特殊的存在。它本质上是一种全局优化,但它的搜索策略更“暴力”——它会随机改变参数,然后看评价函数是否变好。如果变好了就保留,否则就放弃。
什么时候用锤形优化?我个人经验是:当局部优化卡住了,评价函数不再下降时,可以试试锤形优化。它像一把大锤,能把你的设计从局部最优的坑里“砸”出来。
但要注意:锤形优化很耗时间。我一般只让它跑几百次迭代,然后手动检查结果。如果效果不明显,就调整参数范围再试。
总结一下我的优化流程:
- 先用默认评价函数,设好基本约束
- 手动添加几个关键操作数(焦距、总长、厚度等)
- 跑一次局部优化,看看结果
- 如果卡住了,切换到全局优化,跑10-20分钟
- 挑最好的结果,再用局部优化精调
- 如果还不满意,上锤形优化,但别跑太久
这套流程我用了好多年,基本没翻过车。当然,每个项目都有特殊性,你得根据实际情况调整。比如做手机镜头,对厚度约束特别严格,我会把厚度相关的操作数权重设高一些。
好了,评价函数和优化这部分就讲到这里。记住:评价函数是你的“眼睛”,优化器是你的“手”。眼睛要亮,手要稳,才能做出好设计。
公众号:蓝海资料掘金营,微信deep3321