この記事では、ユーザー定義のZemaxプログラミング言語 (ZPL) マクロを使用する方法について説明します。このマクロでは、最適化に使用する値を計算し、メリットファンクションエディタ (MFE) に返します。
Authored By Dan Hill
ダウンロード
はじめに
組み込みの最適化オペランドは 300 点以上用意されていますが、既存のオペランドでは計算できない値を返すことや、そのような値の最適化を必要とすることも考えられます。このことから、OpticStudioはユーザー定義のプログラム (ZPL マクロ) をサポートしています。これにより、メリットファンクションエディタでオペランドによって計算するデータを定義できる柔軟性が得られます。
ZPL マクロは、プログラミングが簡潔で実行が高速なうえ、OpticStudioとの統合性に優れています。また、プログラミングの経験をほとんど必要としません。さらに、評価関数から ZPLM オペランドで ZPL マクロを簡単に呼び出すことができます。
この記事では、マクロを使用して値を計算し、その値を評価関数に返す方法を紹介します。ZPLM オペランドを使用して、その値を最適化の目標値にすることができます。
ZPLM オペランドを使用して、マクロで計算する値を返す
マクロの作成、編集、保存、実行に通じていない場合は、以降の演習へ進む前に記事「Zemax プログラミング言語 (ZPL) の概要」を参照してください。
まず、添付のファイルを開きます。ここでは、特定の実効 F ナンバーを実現するための計算と最適化を目指しているとします。当然のことながら、この操作 (WFNO) を実現するために事前プログラムされたオペランドがOpticStudioに用意されていますが、ここではそのオペランドが使用できないと仮定します。代替策として、この値をマクロで計算し、得られた値を評価関数へ返して、目標を実現できるように最適化する方法をとります。OpticStudioでは実効 F ナンバーを次のように定義しています。
n は像空間の屈折率、θ は像空間でマージナル実光線が成す角度です。この関係を踏まえ、マクロでマージナル実光線を追跡し、実効 F ナンバーを計算します。
OPRETURN キーワードの使用が鍵です。このキーワードは、X として得られた値をグローバルアレイの位置 0 に保存します。これは、このグローバル配列の位置番号であり、メリットファンクションエディタ (MFE) で ZPLM オペランドの [データ] (Data) 列に入力されます。
上図の [マクロ#] (Mac#) はマクロ番号を指します。ZPLM オペランドから呼び出すために作成する各マクロは、ファイル名をZPLxx.ZPLの形式にする必要があります。マクロ番号は 0 ~ 99 の範囲で任意の番号にすることができます。たとえば、ZPL17.ZPL は、MFE の適切なセルで Mac# に 17 を指定することで実行できる有効なファイルの名前です。
ここの例では、マクロの名前を ZPL10.ZPL として適切なディレクトリに保存しておきます。メリットファンクションエディタで ZPLM オペランドを挿入し、その [マクロ#] (Mac#) に 10、[データ] (Data) に 0 を入力します。
このマクロを実行して、抽出した値を返すには、メリットファンクションエディタを更新します。
ここで計算して返される実効 F ナンバーは 4.9782 です。これが正しいかどうかを確認します。WFNO オペランド (実効 F ナンバーの組み込み計算) を挿入し、メリットファンクションエディタを更新します。値が一致していることがわかります。
この方法を使用すると、1 回のマクロ呼び出しで複数の値を返すことができます (詳細については、すでに紹介したユーザーガイドの節を参照してください)。この方法は最適化で使用できるほか、詳しい解析のために MFE に値をレポートするだけの目的でも使用できます。ZPLM は、値を返して最適化する処理で優れた実行速度と柔軟性を発揮します。数多く用意されている組み込み最適化オペランドのどれも、現在のところ、このような速度と柔軟性を提供していません。
評価関数の実行時間に対するユーザー定義オペランドの効果
メリットファンクションエディタでユーザー定義オペランドを使用した場合、演算時間がどの程度変化するかは興味のあるところです。実際のところ、マクロで実行する計算の複雑さで演算時間は左右されますが、一般的には最適化でのマクロの実行速度はきわめて速くなります。これを示すために、ここでは Cooke トリプレットを 2 回最適化します。1 回は ZPLM オペランドと別途作成したマクロを使用し、もう 1 回は事前プログラムしたオペランドである WFNO を使用します。
1 回目では、ZPLM オペランドの目標値を 5、その重みを 1 とします。WFNO オペランドは記述したままでかまいませんが重みは 0 とします。次の設定を使用してデフォルトの評価関数を作成します。
減衰最小二乗法 (DLS) によるローカル最適化を実行します。その実行時間は約 4 秒です。
この最適化で適用された変更を取り消します (F3 キーを押します)。ZPLM オペランドの重みを 0 に変更し、WFNO オペランドの目標値を5、重みを 1 にそれぞれ設定します。最適化を再度実行します。
このネイティブオペランドを使用した演算時間は約 3.5 秒です。2 つの方法に見られる演算時間の差はほぼ 0.5 秒です。OpticStudioでは、ユーザー定義マクロや外部でコンパイルしたプログラムを呼び出す場合でも、最適化をきわめて効率的に実行できることがわかります。
KA-01574
コメント
サインインしてコメントを残してください。