如何自定義優(yōu)化操作數(shù)(ZPLM)

雖然Zemax OpticStudio有300多個(gè)內(nèi)建優(yōu)化操作數(shù),但是還是會(huì)有一些特殊情況是這300多個(gè)操作數(shù)無法涵蓋的。這就要求使用者根據(jù)要求計(jì)算出某些特定的數(shù)值,將這些數(shù)值返回到某個(gè)操作數(shù),再對此操作數(shù)進(jìn)行優(yōu)化。

Zemax OpticStudio支持用戶編程,計(jì)算出特定的數(shù)據(jù),再通過Merit Function Editor(MFE)中的操作數(shù)來定義該數(shù)據(jù)。這些數(shù)據(jù)可以是獨(dú)立于Zemax OpticStudio計(jì)算的,也可以是由Zemax OpticStudio計(jì)算的但是沒有具體的優(yōu)化操作數(shù)表達(dá)的。當(dāng)然,不管是上述哪種情況,使用者都可以用以下兩種方法計(jì)算此數(shù)值:

(1)使用ZPL宏語言

(2)使用外部定義和匯編程序

ZPL宏具有容易編寫、執(zhí)行快速、以及和Zemax OpticStudio集成較好的特點(diǎn)。只要使用者具備一點(diǎn)點(diǎn)的編程經(jīng)驗(yàn)就可以編程計(jì)算。

另外ZPLM優(yōu)化操作數(shù)可以用于從評價(jià)函數(shù)中調(diào)用ZPL宏,這樣使用者就可以直接使用宏計(jì)算出結(jié)果并返回到評價(jià)函數(shù)編輯器中從而實(shí)現(xiàn)優(yōu)化。

本文我們將介紹如何使用宏計(jì)算并通過操作數(shù)ZPLM將數(shù)值返回給評價(jià)函數(shù)。如果想了解更多關(guān)于如何使用操作數(shù)ZPLM可以在使用者手冊The Optimize Tab\Optimization Overview \User defined operands中找到。

本文的范例為:Documents\Zemax\Samples\Sequential\Objectives\Cooke Triplet。


使用操作數(shù)ZPLM返回宏計(jì)算的數(shù)值

現(xiàn)在,假設(shè)我們需要計(jì)算并優(yōu)化Working F/#。當(dāng)然Zemax OpticStudio中操作數(shù)WFNO已經(jīng)可以解決此問題,本文只是舉一個(gè)例子。所以我們可以先假設(shè)操作數(shù)WFNO不存在,我們需要用宏計(jì)算該數(shù)值并返回到評價(jià)函數(shù)中進(jìn)行優(yōu)化。Working F/#的定義如下:

其中n為像方空間的折射率, θ為實(shí)際邊緣光線(Real Marginal Ray)在像空間的角度。根據(jù)這些定義,我們需要用宏追跡一條實(shí)際光線并計(jì)算Working F/#:

注意OPTRETURN關(guān)鍵字的使用,此關(guān)鍵字記錄了全局陣列位置0處“X”的結(jié)果值。我們在MFE的ZPLM操作數(shù)“Dat#”列中填入的就是這個(gè)全局陣列的位置數(shù)。

上圖中“Mac#”對應(yīng)著宏數(shù)。

注意每個(gè)被ZPLM操作數(shù)調(diào)用的宏必須命名為:“ZPLxx.ZPL”的格式,宏數(shù)可以是0到99的任何數(shù),因此ZPL17.ZPL是一個(gè)有效的文件名,可以通過在MFE中的“Mac#”填入17來調(diào)用執(zhí)行。

本例中,命名該宏為ZPL10.ZPL并保存在合適的文件夾中。在MFE中,插入ZPLM操作數(shù),分別在“Mac#”和“Dat#”中填入10和0。

更新該MFE,執(zhí)行宏并返回計(jì)算得到的數(shù)值。

計(jì)算返回的Working F/#是4.9782。在MFE中插入操作數(shù)WFNO驗(yàn)證宏的正確性。由下圖可以看出,兩者計(jì)算得到的數(shù)值相同。

這種方法也可以用于單個(gè)宏調(diào)用并返回多個(gè)數(shù)值(如果想了解更多,請參考前文所說的使用者手冊),這些值可以用于優(yōu)化或者僅僅提供一個(gè)值給MFE做進(jìn)一步分析。ZPLM可以提供驚人的速度以及彈性,使用者可以用該操作數(shù)計(jì)算并優(yōu)化一些特殊數(shù)值。


用戶自定義操作數(shù)是否會(huì)使評價(jià)函數(shù)計(jì)算緩慢?

也許您會(huì)好奇,在評價(jià)函數(shù)中使用自定義的操作數(shù)時(shí),是否會(huì)使得評價(jià)函數(shù)計(jì)算緩慢?其實(shí),這很大程度依賴于您宏計(jì)算的復(fù)雜程度,一般情況下宏計(jì)算是非常快的。

作為演示,我們現(xiàn)在對Cooke Triplet執(zhí)行兩次優(yōu)化:一次使用ZPLM操作數(shù)加上宏,一次使用內(nèi)建操作數(shù)WFNO。

第一種情況,我們將ZPLM的目標(biāo)值設(shè)置為5,權(quán)重設(shè)置為1。第二種情況,我們將WFNO的目標(biāo)值設(shè)置為5,權(quán)重設(shè)置為1。按下圖設(shè)置評價(jià)函數(shù):

我們使用DLS優(yōu)化,可以看到執(zhí)行的時(shí)間大約4.4s:

點(diǎn)擊F3撤銷優(yōu)化,將ZPLM操作數(shù)權(quán)重設(shè)置為0,WFNO目標(biāo)值設(shè)置為5,權(quán)重設(shè)置為1,再次優(yōu)化

可以看出兩者計(jì)算的時(shí)間相差并不大。

因此,即使我們使用了自定義的宏,Zemax OpticStudio依舊可以高效的執(zhí)行計(jì)算。


總結(jié)

在使用Zemax OpticStudio的過程中,我們有時(shí)會(huì)遇到內(nèi)建的優(yōu)化操作數(shù)不能滿足我們要計(jì)算/返回的數(shù)值情況。這時(shí)我們需要利用ZPLM和宏結(jié)合或使用外部定義和匯編程序?qū)@些數(shù)值進(jìn)行計(jì)算和優(yōu)化。兩種方法,ZPLM和宏結(jié)合更為簡單,與Zemax OpticStudio集成的更好,需要更少的編程技巧。