解决方案

SYNOPSYS 光学设计软件课程二十三:参数优化研究+光线追迹失败校正

在本课中,我们将探索一个功能强大但很少使用的SYNOPSYS功能:它可以进行参数研究,显示两个变量对第三个变量的影响。在这种情况下,我们希望了解镜头优化运行的结果如何取决于初始结构。 在一个理想的设计中,每一个起点都将达到最佳可能的结果,但现实并不如此。 对于任何给定的问题,通常存在许多局部最小值,并且我们期望的最好的优化算法应该可以得到最好的结果。

因此,人们会期望两个几乎完全相同的初始结构将达到相同的局部最小值,即使它不是全局的。 当前算法在此优化上的表现如何? TU Delft的Florian Bociort博士发现了一些非常有趣的结果。 他做了一个很简单的例子,如下图所示。

为了使工作变得非常简单,他只在主波长的三个视场点校正了光线,忽略了边缘误差。 然后,他以曲率半径2和曲率半径3的起始值为变量做栅格,并绘制一个图,其中网格上每个像素的颜色编码评价函数的最终值。 他发现有几个局部最小值,即使对于如此简单的问题也不足为奇 - 但完全出乎意料的是,在许多地方,评价函数以非常混乱的方式变化。 因此,附近的起点经常会到达截然不同的终点。 (他在Code-V上做了这个分析。)这是他在http://homepage.tudelft.nl/q1d90/FBweb/fractals.html 上的文章中的一个图解。

(我们将这张照片放在了一边,以便它与下面的SYNOPSYS分析一致。)

注意边界附近的结果是非常复杂和混乱的。 黑色区域表示光线失效的起点,因此无法进行分析。

我们认为SYNOPSYS中的PSD算法比上面的方法更可靠和稳定,因此我们在3参数评估功能PA3上设置了运行。 这是输入:

开始双胶合镜头:

    RLE
    ID FLORIAN STARTING DOUBLET
    WA1 .5876000
     WT1 1.00000
     APS               1
     UNITS MM
     OBB  0.000000    3.00000   16.66670    0.00000    0.00000    0.00000   16.66670    0 AIR
       1 CV      0.0146498673770   TH     10.34600000
       1 N1 1.61800000
    1	GID 'GLASS           '
    2	RAD   -174.6512432672814   TH      1.00000000 AIR
    2	AIR
    3	RAD    -80.2251653581521   TH      2.35100000
       3 N1 1.71700000
    3	GID 'GLASS           '
    4	RAD   -111.8857786363961   TH     92.41206276 AIR
       4 AIR
       4 CV      -0.00893769
       4 UMC     -0.16667000
       4 TH      92.41206276
    4	YMT      0.00000000
    5	CV      0.0000000000000   TH      0.00000000 AIR
       5 AIR
     END
    STORE 5

    And this is the input for the PA3 program):
    ON 78  	 	! use finer grid (118x118 points) 使用更精细的网格(118x118点)
    PA3 LOOP COLOR 	 	! initialize PA3, request color boxes for output初始化PA3,设置输出颜色框
    RZ1 -.025 .04 	 	! set the range of variable Z1设置变量Z1的范围
    RZ2 -.045 .075 	 	! set the range of Z2设置Z2的范围
    RZ3 0 5.5  	! display results over this range of merit function values
    	在此评价函数值范围内显示结果
    NOSMOOTH 	 	 	! there will be steps in the output; do not smooth
    按步输出; 结果不会很平滑
    XLAB "2 CV -.025 .04" ! define the label for the X-axis, which is variable Z1
                             定义X轴的标签,即变量Z1
    YLAB "3 CV -.045 .075" ! label for Y-axis, Z2 Y轴,Z2的标签
    ZLAB "MERIT" 	 	! label for Z-axis, the final merit function Z轴的标签,最终的评价函数
    LOOP
     	! tell PA3 to loop over the above raster of data告诉PA3循环上面的数据栅格
    GET 5  	 	! get the starting lens each time每次都得到初始结构的始镜头
    2 CV = Z1  	! set curvature 2 to the value of variable Z1将曲率2设置为变量Z1的值
    3 CV = Z2  	! and CV 3 to Z2, using the artificial-intelligence parser
    	CV 3到Z2,使用人工智能解析器
    PANT  	 	! initialize the variable list初始化变量列表
    VLIST RAD 2 3 	! and vary two radii 两个不同的半径
    END
     	! end of the variable list 变量列表的结尾
    AANT  	 	! initialize the merit function definition初始化评价函数定义
    GSR .5 10 3 P 0   	! correct a sagittal fan, three rays, on axis 在轴上修正一个光扇图,三条光光线
    GNR .5 1 3 P .75   	! correct a full grid of rays, primary color, 0.75 field point
    									校正完整的光线网格,原色,0.75视场点
    		GNR .5 1 3 P 1   	! same, at full field. 全区域相同
    END  	 	! end of merit function definition 评价函数定义结束

    DAMP 10000  	! initial damping (see below) 初始阻尼(见下文)
    SNAP 50 	 	 	! watch what happens, but not too often, in order to keep it fast
    		                                                       观察发生状况,但不要太频繁,以保持高效
    SYNOPSYS 100  	 	! optimize until it converges  优化到收敛
    Z3 = MERIT  	! assign the current merit function value to variable Z3 PA3  	告诉PA3循环到下一个案例。
    	! tell PA3 to cycle to the next case. 告诉PA3循环到下一个案例。

为什么需要高阻尼? (默认值为1.0或0.01,具体取决于模式切换。)SYNOPSYS中的第一次迭代是用DLS(阻尼 - 最小二乘法)循环法,我们希望避免在该算法的第一次传递时产生的任何混乱; 高阻尼将确保镜头在该过程中变化很小。 更强大的PSD算法追迹从传递到传递的一阶导数的变化,并推导出关于高阶导数的信息。 这是PSD方法背后的技巧,但它只能在第二遍开始。

该研究的结果如下所示。 左侧和底部附近的紫色区域显示该程序在不同的初始点上达到相同的最小值 - 而在Florian的研究中,这些区域达到了不同的最小值。 在相交的边界没有明显的混乱,正如我们所期望的那样,PSD方法就是这种情况,尽管在中央绿色区域出现了散乱的极点。 我们将后者归因于第一遍中DLS方法所做的非零更改。 实际上,如果我们用不同的初始阻尼再次运行,那些随机点出现在不同的地方。

顶部和底部的黑色区域显示了起点产生光线失效的位置,与他们在Florian研究中所做的相同。 我们很好奇如果我们激活仅在SYNOPSYS™中发现的自动光线故障校正功能会发生什么。 我们将SYNOPSYS命令更改为

    SYNOPSYS 100 0 FIX

并重新运行优化

现在我们看到该程序已经纠正了之前发生过的每一个故障。Florian无法优化的初始镜头现在都能产生可观的解决方案。 现在,在以前全黑的区域的边界处有一些非常轻微的混乱,我们将其归因于更改了光线失效校正程序对该起点的影响。 这些变化有时会使镜头更接近另一个相交的区域。

这项非常简单的研究只涉及两个变量的优化。 如果我们将CV 1添加到变量列表会发生什么?

试试看吧!(边界有些偏移,散乱的斑点不再出现。)