【免费下载链接】optiland
Comprehensive optical design, optimization, and analysis in Python, including GPU-accelerated and differentiable ray tracing via PyTorch.
Optiland是一个用 Python 实现的光学设计与优化库,它把镜头优化拆解成三件事:评价函数(merit function)→ 优化变量(variables)→ 求解器(optimizer)。本文面向新手,带你从零理解光学优化评价函数怎么搭、变量怎么选、求解器如何挑,并顺带介绍 GPU 加速与玻璃材料自动选择等进阶玩法。
一、30秒理解Optiland光学优化的核心思路
在传统 Zemax 式软件里,"评价函数表"和"变量表"是两张手工维护的表格。Optiland 把它们变成了代码对象:
| 概念 | 作用 | 例子 |
|---|---|---|
| Operand(操作数) | 衡量系统性能的单项指标,加权重后构成评价函数 | 光斑RMS、波像差、焦距、主光线高度 |
| Variable(变量) | 允许被求解器调整的设计参数 | 曲率半径、厚度、圆锥常数、玻璃材料 |
| Optimizer(求解器) | 迭代调整变量、让评价函数值越来越小的算法 | Dual Annealing、Differential Evolution、Adam |
三者由 OptimizationProblem 类统一封装,完整框架说明见开发者指南 optimization_framework.rst。
一句话总结流程:"加操作数 → 加变量 → 选求解器 → 运行 → 看结果",全程只有四步。
二、如何搭建简单评价函数:第一步上手
1. 创建优化问题
from optiland.optimization import OptimizationProblem problem = OptimizationProblem()2. 添加操作数(定义"好镜头"的标准)
每个操作数都需要三样东西:目标值(target)、权重(weight)、光路输入(input_data)。权重决定该项在评价函数中的"话语权":
problem.add_operand(operand_type='f2', target=50, weight=1, input_data={'optic': lens})Optiland 内置了几十种操作数,覆盖四大类(见 operand.py 中的METRIC_DICT注册表):
- 近轴类:
f1/f2焦距、EPD入瞳直径、magnification放大率等; - 实光线类:
rms_spot_size光斑RMS、real_x_intercept像面交点、OPD_difference光程差等; - 像差类:
seidel赛德尔五项、TSC总球差等; - 结构类:
edge_thickness边缘厚度、AOI入射角等。
💡新手建议:第一个优化任务只需 2~3 个操作数——例如"焦距达标 + 轴上光斑最小",不要一开始就堆几十项。
3. 添加变量(告诉求解器"能动哪里")
problem.add_variable(lens, 'radius', surface_number=2)变量类型在 optiland/optimization/variable/ 下按文件组织,常用的有:
| 变量 | 文件 | 适用场景 |
|---|---|---|
radius/reciprocal_radius | radius.py | 曲面曲率(倒数半径收敛更快) |
thickness | thickness.py | 面间距与中心厚度 |
conic | conic.py | 非球面校正 |
asphere_coeff | asphere_coeff.py | 非球面高阶系数 |
material(玻璃选择) | material.py | 配 GlassExpert 使用 |
三、如何选择合适的求解器:局部、全局与GPU加速
1. 局部求解器:起点不差时的主力
OptimizerGeneric 对scipy.optimize.minimize做了统一封装,Nelder-Mead、Powell、BFGS、L-BFGS-B 等经典方法都可用;针对光学问题的还有 LeastSquares(基于残差向量)和 OrthogonalDescent(正交下降,适合面数多的系统)。
2. 全局求解器:从"毛坯"起步时的救星
如果初始结构离目标很远(比如从三片平板做起),局部方法容易掉进局部最优。Optiland 提供 4 种 SciPy 全局方法 + 2 种自研无梯度方法:
- DualAnnealing(双退火)、DifferentialEvolution(差分进化)、SHGO、BasinHopping
- 自研的 CMA-ES 与 ParticleSwarm(粒子群)
典型策略:先用全局法粗搜,再切换局部法精修。
3. 实战:Cooke 三片式从平板到可用镜头
官方案例 Tutorial_3d_Optimization_Case_Study_Cooke_Triplet.ipynb 演示了从 3 片近乎平行的玻璃片出发,设计 F/5、焦距 50 mm 的 Cooke 三片式。优化过程中,镜头结构逐次"长"出来,同时评价函数值一路下降:
4. GPU加速:用PyTorch后端跑微分可导优化
Optiland 的 Torch 后端支持自动微分(autograd),让评价函数对变量直接可导,可用 Adam、SGD 等深度学习优化器;大批量光线在 GPU 上并行追迹,吞吐量相比 CPU 有明显提升:
对应示例:torch_rms_spot_size.ipynb。
四、进阶技巧:玻璃自动选择与缩放
1. GlassExpert:让算法替你选玻璃
选玻璃是"离散变量 + 连续变量"混合问题,普通求解器处理不了。GlassExpert 的做法是:在 nd–Vd 玻璃图上先全局搜索(K-Means 降采样整个目录),再在最优玻璃邻域做局部搜索,每换一个候选玻璃就对连续变量做一次局部优化,最终保留最优组合。
玻璃目录数据存放在 optiland/database/,完整案例见 Tutorial_3e_Glass_Expert_Categorical_Optimization.ipynb。
2. 变量缩放(Scaling):让不同量级的变量"公平竞争"
半径可能是几百毫米、厚度是零点几毫米,量级悬殊会让梯度法走偏。Optiland 在 optiland/optimization/scaling/ 提供线性、对数、幂、倒数四种缩放器,把变量归一化到相近区间,收敛更稳。
五、不想写代码?GUI里同样能优化
Optiland 自带图形界面,镜头数据、系统属性、分析和优化都在同一窗口完成,适合快速迭代与可视化检查:
界面结构详见 optiland_gui/。
六、常见问题速查
| 问题 | 建议做法 |
|---|---|
| 评价函数卡在某个值不降 | 换全局求解器(如 DifferentialEvolution),或检查是否有变量"卡边界" |
| 某操作数权重设多大? | 先让关键指标(焦距、光斑)权重高,次要指标逐步加权,避免互相打架 |
| 收敛慢 | 给半径变量改用reciprocal_radius;启用内置的批量光线评估(默认开启) |
| 想加自定义操作数/求解器 | 继承 Operand 或OptimizerGeneric并注册,见 Tutorial_3c_User_Defined_Optimization.ipynb |
更多可运行示例集中在 docs/gallery/optimization/,涵盖光斑RMS、波像差、非球面、自由曲面、约束优化、全局搜索等 20+ 场景,建议从 rms_spot_size.ipynb 这个最简单的例子跑起来再逐步加难度。
小结
- 评价函数= 用操作数描述"什么是好镜头",权重决定优先级;
- 变量= 圈定求解器的搜索范围,从半径/厚度起步即可;
- 求解器= 近起点选局部法(L-BFGS-B、正交下降),毛坯起步选全局法(Dual Annealing、CMA-ES),要可导大计算量就上 GPU + Adam;
- 进阶= GlassExpert 自动选玻璃、Scaling 变量缩放、GUI 可视化迭代。
掌握这条"操作数 → 变量 → 求解器"主线,你就已经能独立完成一个镜头从毛坯到可用的完整优化流程了 🚀
【免费下载链接】optiland
Comprehensive optical design, optimization, and analysis in Python, including GPU-accelerated and differentiable ray tracing via PyTorch.
相关推荐
如何优化LevelDB配置参数:从基础到高级的完整指南
如何优化LevelDB配置参数:从基础到高级的完整指南 LevelDB是由Google开发的高性能键值存储库,提供了从字符串键到字符串值的有序映射。本文将全面解
数据库KV存储嵌入式数据库如何快速使用ONNX简化器:优化深度学习模型的完整指南
如何快速使用ONNX简化器:优化深度学习模型的完整指南 ONNX简化器(ONNX Simplifier)是一款强大的深度学习模型优化工具,能够帮助开发者简化ON
如何快速掌握Unity uGUI高级用法:从基础到优化的完整指南
如何快速掌握Unity uGUI高级用法:从基础到优化的完整指南 Unity uGUI是Unity引擎中强大的UI系统,能够帮助开发者创建各种交互式界面。本指南
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考