如何自定義優(yōu)化操作數(ZPLM)
雖然Zemax OpticStudio有300多個內建優(yōu)化操作數,但是還是會有一些特殊情況是這300多個操作數無法涵蓋的。這就要求使用者根據要求計算出某些特定的數值,將這些數值返回到某個操作數,再對此操作數進行優(yōu)化。
Zemax OpticStudio支持用戶編程,計算出特定的數據,再通過Merit Function Editor(MFE)中的操作數來定義該數據。這些數據可以是獨立于Zemax OpticStudio計算的,也可以是由Zemax OpticStudio計算的但是沒有具體的優(yōu)化操作數表達的。當然,不管是上述哪種情況,使用者都可以用以下兩種方法計算此數值:
(1)使用ZPL宏語言
(2)使用外部定義和匯編程序
ZPL宏具有容易編寫、執(zhí)行快速、以及和Zemax OpticStudio集成較好的特點。只要使用者具備一點點的編程經驗就可以編程計算。
另外ZPLM優(yōu)化操作數可以用于從評價函數中調用ZPL宏,這樣使用者就可以直接使用宏計算出結果并返回到評價函數編輯器中從而實現(xiàn)優(yōu)化。
本文我們將介紹如何使用宏計算并通過操作數ZPLM將數值返回給評價函數。如果想了解更多關于如何使用操作數ZPLM可以在使用者手冊The Optimize Tab\Optimization Overview \User defined operands中找到。
本文的范例為:Documents\Zemax\Samples\Sequential\Objectives\Cooke Triplet。
使用操作數ZPLM返回宏計算的數值
現(xiàn)在,假設我們需要計算并優(yōu)化Working F/#。當然Zemax OpticStudio中操作數WFNO已經可以解決此問題,本文只是舉一個例子。所以我們可以先假設操作數WFNO不存在,我們需要用宏計算該數值并返回到評價函數中進行優(yōu)化。Working F/#的定義如下:

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

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

上圖中“Mac#”對應著宏數。
注意每個被ZPLM操作數調用的宏必須命名為:“ZPLxx.ZPL”的格式,宏數可以是0到99的任何數,因此ZPL17.ZPL是一個有效的文件名,可以通過在MFE中的“Mac#”填入17來調用執(zhí)行。
本例中,命名該宏為ZPL10.ZPL并保存在合適的文件夾中。在MFE中,插入ZPLM操作數,分別在“Mac#”和“Dat#”中填入10和0。

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

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

這種方法也可以用于單個宏調用并返回多個數值(如果想了解更多,請參考前文所說的使用者手冊),這些值可以用于優(yōu)化或者僅僅提供一個值給MFE做進一步分析。ZPLM可以提供驚人的速度以及彈性,使用者可以用該操作數計算并優(yōu)化一些特殊數值。
用戶自定義操作數是否會使評價函數計算緩慢?
也許您會好奇,在評價函數中使用自定義的操作數時,是否會使得評價函數計算緩慢?其實,這很大程度依賴于您宏計算的復雜程度,一般情況下宏計算是非??斓?。
作為演示,我們現(xiàn)在對Cooke Triplet執(zhí)行兩次優(yōu)化:一次使用ZPLM操作數加上宏,一次使用內建操作數WFNO。
第一種情況,我們將ZPLM的目標值設置為5,權重設置為1。第二種情況,我們將WFNO的目標值設置為5,權重設置為1。按下圖設置評價函數:

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

點擊F3撤銷優(yōu)化,將ZPLM操作數權重設置為0,WFNO目標值設置為5,權重設置為1,再次優(yōu)化

可以看出兩者計算的時間相差并不大。
因此,即使我們使用了自定義的宏,Zemax OpticStudio依舊可以高效的執(zhí)行計算。
總結
在使用Zemax OpticStudio的過程中,我們有時會遇到內建的優(yōu)化操作數不能滿足我們要計算/返回的數值情況。這時我們需要利用ZPLM和宏結合或使用外部定義和匯編程序對這些數值進行計算和優(yōu)化。兩種方法,ZPLM和宏結合更為簡單,與Zemax OpticStudio集成的更好,需要更少的編程技巧。