吾爱光设

 找回密码
 注册
会员须知
会员须知
实用帮助
实用帮助
查看: 17385|回复: 5

[技术文章] 如何写自定义的优化操作数

  [复制链接]
  • TA的每日心情
    开心
    2017-12-2 22:19
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    2

    主题

    0

    回帖

    6

    积分

    小白

    积分
    6
    发表于 2017-12-1 00:12 | 显示全部楼层 |阅读模式
    本帖最后由 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


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?注册

    ×

    评分

    参与人数 2威望 +1 金币 +7 贡献值 +3 收起 理由
    烧饼 + 1 + 2 + 1
    天空很蓝 + 5 + 2 积极交流,赞

    查看全部评分

    不错不错!
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-1-10 22:50
  • 签到天数: 331 天

    [LV.8]以坛为家I

    35

    主题

    201

    回帖

    276

    积分

    初级

    积分
    276
    发表于 2018-1-26 16:03 | 显示全部楼层
    请教一下,图片中有颜色的代码是在什么软件里编辑的呢?
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-8-24 11:04
  • 签到天数: 511 天

    [LV.9]以坛为家II

    3

    主题

    85

    回帖

    55

    积分

    入门

    积分
    55

    论坛忠实支持者

    发表于 2018-1-30 11:03 | 显示全部楼层
    woshanliang1 发表于 2018-1-26 16:03
    请教一下,图片中有颜色的代码是在什么软件里编辑的呢?

    新版的zemax直接编辑就是这样的吧
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情

    2018-9-25 23:03
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    0

    主题

    19

    回帖

    8

    积分

    小白

    积分
    8
    发表于 2018-7-21 23:39 | 显示全部楼层
    解释的非常清楚。
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-3-9 19:52
  • 签到天数: 442 天

    [LV.9]以坛为家II

    53

    主题

    392

    回帖

    156

    积分

    初级

    积分
    156

    论坛忠实支持者

    发表于 2018-10-16 16:43 | 显示全部楼层
    说实话,这里的NUSR不太理解,为什么就可以定义到相空间的面?


    您是怎么理解这个的???

    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情

    2024-11-22 09:53
  • 签到天数: 946 天

    [LV.10]以坛为家III

    16

    主题

    383

    回帖

    121

    积分

    入门

    积分
    121
    发表于 2021-9-16 08:51 | 显示全部楼层
    Dreamor_007 发表于 2018-10-16 16:43
    说实话,这里的NUSR不太理解,为什么就可以定义到相空间的面?

    NSUR代表number of sufaces,意思是系统设置了多少个面,自然这个值就代表了像面的面别了
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    联系我们|本论坛只支持PC端注册|手机版|小黑屋|吾爱光设 ( 粤ICP备15067533号 )

    GMT+8, 2024-11-23 08:45 , Processed in 0.156250 second(s), 24 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表