3. 评价函数构建:如何设计合理的评价函数来引导优化方向,避免陷入局部极小值
好,咱们进入第三章。前两章我们聊了局部极小值到底长什么样,也聊了初始结构怎么选。但说实话,真正决定优化成败的,往往是今天要讲的这个环节——评价函数。
我见过太多人,一上来就把所有像差塞进评价函数,权重全给1,然后点优化。结果呢?跑了一晚上,系统卡在一个莫名其妙的局部坑里,怎么都出不来。嗯,这就是典型的“评价函数没设计好”。
评价函数说白了,就是告诉优化算法:“嘿,往这个方向走,那边更好。” 你指的方向不对,算法再聪明也没用。
3.1 评价函数的核心构成
一个完整的评价函数,通常包含三部分:
| 组成部分 | 作用 | 常见形式 |
|---|---|---|
| 像差项 | 控制成像质量 | 波前差、RMS光斑、MTF |
| 边界约束 | 保证工艺可行性 | 中心厚、边缘厚、空气间隔 |
| 操作数 | 具体控制某个参数 | EFL、F/#、畸变、远心度 |
我个人习惯,在构建评价函数时,会先把边界约束放进去。为什么?因为如果你不约束镜片厚度,优化器可能会给你一个厚度为0.01mm的镜片——加工厂直接骂娘。我曾经吃过这个亏,后来学乖了。
3.2 权重分配的艺术
权重怎么给?这是评价函数设计里最玄学的地方。但也不是完全没规律。
我总结了一个经验法则:先松后紧,逐步收紧。
- 第一阶段(粗优化):只控制主要像差(球差、彗差、像散),权重给1~5。别管畸变,别管MTF,先把光路理顺。
- 第二阶段(细优化):加入次要像差(场曲、色差),权重给5~10。这时候可以开始看MTF了。
- 第三阶段(精优化):全面控制,权重按目标值动态调整。比如MTF在0.5以上时权重给10,低于0.5时给1。
你想想看,如果一开始就把MTF权重拉到100,优化器会拼命去提升MTF,结果可能把镜片形状搞得很奇怪,反而卡在局部极小值里出不来。
OPLT和OPGT操作数做“软约束”。比如让畸变小于2%,而不是精确等于0%。这样优化器有更多自由度,不容易卡死。
3.3 避免局部极小值的评价函数策略
这部分是今天的重点。我直接上干货——四种实战策略。
策略一:多目标加权法
不要只盯着一个指标优化。比如你只优化RMS光斑半径,优化器可能会把光斑压得很小,但MTF反而很差。为什么?因为RMS光斑小不代表MTF好,尤其是存在离焦时。
我建议同时控制3~5个指标:
MF = w1 * RMS + w2 * (1 - MTF) + w3 * Distortion + w4 * FieldCurvature
每个指标的权重根据系统要求动态调整。比如手机镜头,畸变权重可以给高一点;投影镜头,MTF权重优先。
策略二:渐进式约束法
这是我最喜欢的方法。别一次性把所有约束都加上,而是分阶段加入。
- 第一轮:只控制焦距和F/#,其他全放开。
- 第二轮:加入像差控制,权重给低。
- 第三轮:加入边界约束,防止镜片太薄或太厚。
- 第四轮:加入公差敏感度约束,保证可制造性。
这样做的好处是,优化器在每个阶段都有足够的自由度去探索全局空间,不容易掉进局部坑里。
策略三:惩罚函数法
有时候,某些参数必须严格限制,比如镜片中心厚不能小于1mm。这时候可以用惩罚函数:
Penalty = k * (CT - CT_min)^2 (当 CT < CT_min 时)
注意,惩罚系数k不能太大,否则优化器会“硬撞”边界,导致振荡。我一般取k=10~50,具体看系统敏感度。
策略四:随机扰动法
这个有点“暴力”,但很有效。在优化过程中,每隔一段时间,给评价函数加一个随机扰动项:
MF_new = MF_old + random(-0.1, 0.1) * MF_old
这样可以让优化器跳出当前的局部极小值,去探索其他区域。我在设计一个广角镜头时用过这招,效果出奇的好。
3.4 评价函数构建的完整流程
下面这张图,是我自己总结的评价函数构建流程,分享给你:
3.5 实战案例:一个手机镜头评价函数的设计
拿一个典型的手机镜头来说吧。目标:F/1.8,焦距4.5mm,总长6mm以内,畸变小于1%。
我当时的评价函数是这样设计的:
| 操作数 | 目标值 | 权重 | 说明 |
|---|---|---|---|
| EFFL | 4.5 | 10 | 焦距必须准 |
| OPLT(CT, 0.3) | 0 | 1 | 中心厚不小于0.3mm |
| OPLT(ET, 0.2) | 0 | 1 | 边缘厚不小于0.2mm |
| RMS | 0 | 5 | 粗优化时用 |
| MTF@0.7field | 0.5 | 20 | 精优化时重点控制 |
| DIST | 1 | 15 | 畸变严格 |
注意看,粗优化时我只用了前4个操作数,MTF和畸变都没加。等光路基本理顺了,再加入MTF和畸变进行精优化。这样一步步来,系统很少卡在局部极小值里。
3.6 常见误区总结
最后,我列几个自己踩过的坑,你注意避开:
- 误区一:权重越大越好 —— 权重太大,优化器会“死磕”这个指标,其他指标全崩了。
- 误区二:一次性加满所有约束 —— 优化器会直接卡死,动都动不了。
- 误区三:只用一种评价指标 —— 比如只看RMS,不看MTF,结果RMS很好,MTF很差。
- 误区四:不检查边界约束 —— 优化完了才发现镜片厚度不满足工艺要求,白忙一场。
嗯,评价函数这块,说白了就是“平衡的艺术”。你既要让优化器有足够的自由度去探索,又要给它明确的方向指引。把握好这个度,局部极小值就没那么可怕了。