本帖最后由 wilhelm 于 2017-12-3 02:53 编辑
如何写自定义的优化操作数
How to Write Your Own Operrand
原文链接:http://customers.zemax.com/os/resources/learn/knowledgebase/how-to-write-your-own-optimization-operand
总结:这篇文章介绍了,在优化过程中,如何使用自定义宏实现优化编辑器计算或返回特定值。
作者:Dan Hill
日期:2/01/2006
适用于:优化
引言
尽管Zemax已经有300多个内置的优化操作数,在某些情况下你仍然希望返回或优化现有操作数无法计算的数值。鉴于此,Zemax支持用户使用程序来灵活地定义操作数,并在优化函数编辑器(MFE)中将其调用。这种数据可以是非Zemax软件计算获得的数据,也可以是Zemax已经用各种函数计算出并报告的数,但这些数据无法用优化操作数进行操作。
无论以上哪种情况,你都可以用以下两种方法来定义用于计算的数据:
1.使用Zemax编程语言宏(ZemaxPrograming Language Macro, 以下简称ZPLM);
2.使用外部定义并编译的程序;
ZPLM编写简单,执行快,并已完全集成在Zemax中,不需要太多编程经验。另外,ZPLM操作数可在优化函数编辑器中调用ZPLM。
我们将在本文中阐明,如何在优化函数编辑器中利用宏控制操作数ZPLM计算并返回数值,这个返回的数值可以是优化过程中的某一目标数值。Zemax用户手册第14章中的“用户定义操作数(User defined opperand)”部分详细讨论了如何使用ZPLM操作数。附件中的库克三片式镜头文件(你也可以从Zemax根目录>序列物镜示例文件夹中获得)将用来展示ZPLM操作数灵活的特点。
用ZPLM操作数返回宏计算的数值
如果你还不熟悉如何创建、编辑、保存和执行宏,你可能需要在阅读本篇文章之前参考另一篇知识库中的文章。
首先假设我们要对光学系统的工作F数(WorkingF/#)进行计算和优化。当然,Zemax已经有操作数可以进行此操作(WFNO)。但为了展示ZPLM操作数的功能,我们假设不能使用WFNO这个操作数。我们可以通过另一种方式,利用宏进行计算并将计算结果返回给优化函数,并且优化函数可以把它优化到我们想要的数值。在Zemax中工作F数的定义如下: 其中,n是像空间折射率,θ是像空间的真实边缘光角度。有了这个关系,我们可以用宏来跟踪一条真实的边缘光线并计算工作F数:
注意关键词OPRETURN的使用。这个关键词会将”working_f_num”的计算结果值存储在一个全局数组的第0。在优化函数编辑器中可通过设置ZPLM操作数的“Dat#”为0来调取全局数组中对应的数据。
上图中“Mac#”对应宏编号。操作数ZPLM调每一个宏的文件名格式必须是”ZPLxx.ZPL”形式。xx表示宏的编号,它可以是0到99之间的任意数字,因此ZPL17.ZPL是一个有效的文件名,可以在MFE中通过指定“Mac#”为17执行。
在这个例子中,我们将宏命名为ZPL10.ZPL并保存在相应目录下。在优化函数编辑器中,插入ZPLM操作数,并分别输入“Max#”和“Dat#”为10和0。
更新评价函数编辑器(MeritFunction Editor)来执行宏并返回计算的数值,
我们计算并返回的工作F数是4.9782。让我们对这一结果进行验证。插入操作数WFNO(zemax已有的计算工作F数的操作数)并更新评价函数编辑器。我们可以看到这两个数值是完全相同的。
注意,单次调用宏可以返回多个数值。在以后的分析中,我们可以利用这个技巧进行优化或向优化函数编辑器返回数值(想了解更多的话,请参考用户手册中的相关章节)。ZPLM可以以惊人的速度和灵活性去计算和优化内置优化操作数无法计算的数值。
用户定义的操作数会使优化函数的运行变慢么?
你可能会问,在优化函数编辑器中使用用户自定义操作数时,计算时间会受到多大的影响。这其实取决于宏计算的复杂程度,但在通常情况下,在优化过程中执行宏是很快的。为了说明这一点,我们对库克三片镜独立进行两次优化:一次使用操作数ZPLM和我们构建的宏,另一次使用内置操作数WFNO。
在第一中情况中,把ZPLM操作数的目标值设为5,权重设为1。你不必删除操作数WFNO,只需要把它的权重设置为0即可。用下面的参数设置生成一个默认的优化函数运行优化。执行时间大约是4s。
撤销优化的结果(按F3键)。改变ZPLM操作数的比重为0,并将WFNO操作数的目标设为5,比重设为1,再次进行优化。
用操作数WFNO执行时间大约是3.6秒。二者之间差了0.5秒!如我们看到的,即使在某些情况下需要调用用户自定义宏或者外部编译的程序,Zemax仍旧可以非常高效地进行优化。
总结
有时候Zemax内置操作数无法直接返回或优化需要的参数。通过灵活的ZPLM和用户自定义操作数,我们可以从用户自定义宏或者其他拓展程序给优化函数编辑器返回计算的数据。宏是两种方法中相对简单,已经较好地集成在Zemax中,并且不需要用户有很多的编程经验。
参考资料
Zemax Optical DesignProgram User’s Guide, Zemax Development Corporation
|