全局搜索算法(Global Synthesis)的原理与参数设置

全局搜索算法,Code V 里叫 Global Synthesis。说白了,它就是在整个设计空间里「撒网」,帮你找到那些可能被你忽略的好结构。我刚开始用这个功能时,总觉得它就是个自动跑参数的工具,后来才发现——嗯,它的核心价值在于「跳出局部陷阱」。

Global Synthesis 的核心逻辑

这个算法的思路其实很直白:

  • 第一步:随机采样——在变量允许范围内,生成大量初始结构
  • 第二步:局部收敛——对每个初始结构做一轮局部优化
  • 第三步:筛选排序——按评价函数值排序,保留最优的几个
  • 第四步:聚类分析——把结构相似的解归为一类,避免重复

我习惯把 Global Synthesis 比作「先广撒网,再重点捕捞」。它不会像局部优化那样,一上来就盯着一个方向猛钻。

关键认知:Global Synthesis 不是「一次跑完就完事」的工具。它更像一个探索器,帮你发现哪些结构方向值得深入。

Global Synthesis 四步流程 随机采样 生成初始结构群 局部收敛 每个结构局部优化 筛选排序 按评价函数排序 聚类分析 归并相似结构 输出候选结构 Top N 个不同构型 💡 说明: 聚类分析是关键——它把结构相似的解归为一类,避免你拿到一堆「看起来不同、实则一样」的结果。 我一般保留 5~8 个不同类别的候选结构,再逐个深入优化。

关键参数详解

Global Synthesis 的参数设置,直接决定了搜索效果。我踩过不少坑,这里把最关键的几个参数说清楚。

参数名称 默认值 推荐范围 作用说明
Cycles 5 3~10 全局搜索的轮次。每轮会生成一批新结构,并淘汰差的
Population 50 30~100 每轮保留的结构数量。越大搜索越广,但耗时也越长
Mutation Rate 0.2 0.1~0.4 变异率。控制新结构偏离父代的程度
Crossover Rate 0.8 0.6~0.9 交叉率。控制两个父代结构混合的程度
Convergence Threshold 0.01 0.001~0.05 收敛判据。评价函数变化小于此值时停止

我的习惯:刚开始探索时,我会把 Cycles 设到 8、Population 设到 80,让搜索充分展开。等找到几个有潜力的方向后,再缩小范围做精细搜索。

参数设置的实战经验

参数怎么调?我直接说几个我在项目中遇到的真实情况。

1. Cycles 太少,搜索不充分

有一次我做投影物镜设计,Cycles 只设了 3。结果跑出来的结构全是类似的——都是三片式变种。后来我把 Cycles 提到 6,才发现了另一种完全不同的四片式结构,性能反而更好。

2. Population 太大,浪费时间

Population 不是越大越好。我试过设到 150,结果跑了整整一个晚上,最后发现最优解在第 40 个结构附近就出现了。后面的 110 个基本是重复劳动。现在我做常规镜头,Population 一般控制在 50~60。

3. Mutation Rate 要配合变量范围

这个参数很微妙。变量范围大时,Mutation Rate 可以设高一点(0.3~0.4),让搜索跳得更远。变量范围小时,Mutation Rate 设 0.1~0.2 就够了,否则容易跳出好区域。

⚠️ 避坑提醒:我曾经把 Mutation Rate 设到 0.5,结果每次跑出来的结构都乱七八糟,连基本的成像条件都满足不了。后来才意识到——变异率太高,相当于每次都在随机瞎猜,算法根本没法收敛。

实际操作步骤

在 Code V 里跑 Global Synthesis,我一般按这个流程来:

  1. 定义变量——把曲率半径、厚度、玻璃等设为变量。注意变量数量不要太多,我一般控制在 15~20 个以内
  2. 设置约束——边界约束、焦距约束、总长约束等。约束太松,搜索空间太大;约束太紧,可能错过好结构
  3. 选择评价函数——默认是 RMS 波前差。如果关注 MTF,可以自定义评价函数
  4. 设置 Global Synthesis 参数——按上面的推荐范围来
  5. 开始搜索——点 Run,然后去喝杯咖啡。搜索时间取决于变量数量和 Population 大小
  6. 分析结果——查看候选结构列表,重点关注不同类别的结构

一个实用技巧:跑完 Global Synthesis 后,别急着选最优的那个。我习惯把排名前 5 的不同类别结构都保存下来,然后分别做一轮局部优化。有时候排名第 3 的结构,经过局部优化后反而能超过第 1 名。

常见问题与对策

问题现象 可能原因 解决方法
所有候选结构几乎一样 Population 太小,或 Cycles 太少 增大 Population 到 80+,Cycles 到 8+
评价函数一直不下降 约束太紧,或变量范围太小 适当放宽约束,扩大变量范围
搜索时间过长 变量太多,或 Population 太大 减少变量数量,或降低 Population
结果结构不满足基本条件 缺少关键约束 添加焦距、总长、后焦等硬约束

嗯,Global Synthesis 说到底就是个「探索工具」。它不能直接给你最终设计,但能帮你找到那些你自己想不到的结构方向。我每次开始一个新项目,都会先跑一轮 Global Synthesis,看看设计空间里到底藏着哪些可能性。