最適化するとき、どれくらい光線飛ばしているの?

最適化した結果、評価関数は悪くないのに期待したほどの性能が出ていないことはありませんか?
最適化が進むスピードが遅いと感じることはありませんか?

最適化には非常に多彩なパラメータを設定できます。
よく調整するパラメータは、通常であればコンストレインツや評価関数の重みだと思います。
特にコンストレインツは設計仕様として既に決められている場合が多いので、パラメータとして設定、調整しやすいです。

では、より良い特性のモデルにより早くたどり着くためには、コンストレインツや評価関数の重みを調整するだけでいいのでしょうか?

最適化では各サイクルで光線追跡を行い、その結果をベースとしてよりよい光学モデルへと各パラメータを変更しています。
そのため追跡する光線の配置や本数も最適化の重要な設定項目のひとつです。

最適化で追跡する光線を設定する箇所はここです。


※クリックで拡大表示します。

『(瞳内での)光線の間隔』は光線の間隔を瞳に対する割合で指定するパラメータです。
コマンドではDELです。

この(瞳内での)光線の間隔を狭くすればするほど、より詳細に最適化を進めることができます。

「できるだけ光線の間隔を狭くする」という最適化の方針は得策ではありません。
というのも追跡する光線に比例して最適化の収束する速度が遅くなるからです。
モデルや設定によっては1000倍ほどの違いが出ます。

逆に光線の間隔が広すぎてもよくありません。
複雑な非球面形状を含むモデルを最適化する場合は追跡する光線の狭間で変形する形状に対応できません。

では、最適化で追跡する光線の配置を調整する目安はないものでしょうか?
追跡する光線の様子を確認する方法はないでしょうか?
これが今回、攻略すべきポイントです。

こんなときには最適化で使用する光線の様子を確認できるマクロ“AUTOGRID.seq”が便利です。

攻略のポイント!

  • モデルに非球面を使用していますか?
  • モデルは光軸対称ですか?
  • 最適化のDELはいくつくらいが最適ですか?

使い方は簡単です。

メニューのツール > マクロマネージャからサンプルマクロのツリーの下の最適化のリストで
“C:\CODEV*****\macro\autgrid.seq”を選択してください。
そして実行ボタンを押せばAUTGRID設定画面が現れます。

毎回この作業が面倒に感じる方は“お気に入りに追加”か“ツールバーに指定”、“メニューバーに追加”をすれば、次回からは簡単にこのマクロにアクセスできます。

まずはこのままOKをクリックしてください。すると以下のようなプロットが表示されます。


※クリックで拡大表示します。

これの光線配置が最適化で追跡する光線の数と間隔です。
(瞳内での)光線の間隔がDefaultのときでDEL 0.385です。

このDefaultですが、最適化するモデルによって変化します。
DELが0.385となるのは評価関数のタイプが横収差で、以下の面タイプを持たないモデルを最適化するときです。
“非球面、トロイダル面、熱勾配面、スプライン面、アナモルフィック非球面、ユーザー定義面、特殊面”

これらの7つの面タイプのいずれかが含まれているときはDELのDefaultは0.22となります。


※クリックで拡大表示します。

評価関数のタイプがMTFのときは0.15、ファイバ結合効率のときは0.05です。

さらに計算速度アップのためにモデルの対称性を考えて追跡する光線の本数を限定しています。
光軸対称のモデルであれば、追跡する光線は1/8ですみます。
YZ平面に対称であれば瞳の半分に通過する光線のみ追跡します。
それ以外の面形状や偏心で完全に非対称なモデルであれば、もちろん全ての光線を追跡します。
最適化で使用する光線は計算時間にダイレクトに影響しますので、このようにして必要最小限の光線のみ追跡しています。

また、追跡する光線の本数が画角によって変わらないように、ビネッティングの設定も考慮して追跡する光線の配置を決めています。
Field Numberの設定を変更すると画角が変化しても追跡光線本数が変化せず、光線の配置が変化していることを確認できます。


※クリックで拡大表示します。

この(瞳内での)光線の間隔ですが、通常はDefaultのままで特に問題ないと思います。

もちろんモデルの形状によっては計算時間を十分にかけて最適化を実行しなければいけないときもあります。

そういったときには(瞳内での)光線の間隔を狭く(値を小さく)する必要がありますが、ただ単純に小さくすればいいというものでもありません。
たとえばテキトーに(瞳内での)光線の間隔を0.3とすると以下のような光線配置となります。


※クリックで拡大表示します。

Defaultの0.385と違い光線の間隔は狭くなり追跡する光線本数も増えましたが、このような配置ではアパチャー限界に近い光線を追跡していません。
これではアパチャーの端で急激に形状が変化しているような形状を持つモデルに対してうまく最適化できず、収差が残ってしまいます。たとえば高次の非球面係数の設定されている非球面などを持つモデルでは要注意です。

こんなときにはアパチャーの端に光線が通るように(瞳内での)光線の間隔を調整すればいいのです。
ここで問題となるのが「どれくらいの値にすればいいのか?」です。
むやみに値を小さくて追跡する光線本数を増やしてしまうと、最適化に無駄に時間がかかってしまいます。

ヒントはテキスト出力の中にあります。


※クリックで拡大表示します。

Number of rays in the half pupil : 瞳の半分に含まれている光線本数
Equivalent NRD : NRDの値
Requested DEL : 指定したDELの値
Outermost ray at ※※※ relative vignetted radial pupil coord. : 最も端の光線の瞳(ビネッティングあり)に対する相対位置

Reduce DEL to a value just above ※※※ to move rays in from edge of pupil. : 瞳の外側を通る光線を瞳内に入れるためのDEL
Increase DEL to a value just below ※※※ to move rays out to edge of pupil. : 最も端の光線が瞳の端を通るためのDEL

瞳の端に光線を通すためにDELを0.28284と0.34299にした時の光線配置が以下です。


※クリックで拡大表示します。

※クリックで拡大表示します。

瞳全体で追跡する光線本数が44本と32本になります。
DELが0.28284の方がより詳細に最適化することができます。
一方、DELが0.34299の方が、追跡する光線本数が少ないので、速く最適化が進みます。
他にも瞳の端付近を通る光線の本数が若干違います。

どんな値がいいのかは設計されている光学モデルによります。
モデルの特徴を確認して最良のDELの値を設定してください。

モデルによっては、DELが0.3のように、瞳の端の光線を追跡しないほうがうまく最適化される場合もあるかもしれません。

最後に注意していただきたいのはDELと評価関数の関係です。
最適化の評価関数はDELで設定した光線と主光線の差を元にして計算しています。
そのためDELの値を変更すると評価関数が変化します。
DELの値が違う場合は単純に評価関数の差で性能の優劣が決まりません。
必ず解析オプションでモデルの光学特性を解析してください。

このように、コンストレインツ以外にも最適化で設定するパラメータによって、最適化の結果が変わることがあります。
他にも最適化でより良い解により早くたどり着くには、押さえておくべき要点がいくつかあります。
CODE Vでの最適化のテクニックを知りたい方は「機能別セミナー」をお勧めしています。

以下、補足です。

最適化で追跡する光線の配置ですが、光の波面を再現するという観点に立つと、もっと効率のいい設定があります。 それはガウシアン求積という考え方です。

ガウシアン求積の考え方を用いて光線の配置を設定する場合はこちらの設定になります。

ガウシアン求積を利用すると、より少ない本数でより適切に波面を再現するために必要な光線の配置と重みを設定することができます。
詳しい情報はリファレンスマニュアル日本語版を以下のキーワードで検索してご確認ください。
『ガウシアン求積』

この放射状グリッドの設定で追跡するガウシアン求積を利用した光線の配置と重みはAUTGRIDGQマクロで確認することができます。
メニューのツール>マクロマネージャからサンプルマクロのツリーの下の最適化のリストで“C:\CODEV*****\macro\autgrid.seq”を選択することで実行できます。

マクロの中身をちょっと覗いてみませんか?

AUTGRIDマクロの中身を詳しく見てみると、光学系の設計に役立つこともあります。
autgrid.seqを開いてみてください。

まず、ヘッダー情報とGUIダイアログのための記述があります。

次に引数の確認をしています。

このマクロでは光線配置の.PLTファイルを全部イチから記述しています。

OPEコマンドで.PLTファイルを開きます。
次に初期化(" 1 8.5 0.0"、" 5 0")します。
そして最初にプロットのフレームとラベル、サークル、X軸、Y軸を記述していきます。

このプロットに各格子光線を追記していきます。

そして.PLTファイルをファイナライズ(" 3 8.500 0.000"、" 2")して終了です。

CLOコマンドで.PLTファイルを閉じています。

マクロの最後にDPLコマンドでCODE V上に描画しています。

AUTGRIDGQマクロもだいたい同じような構成です。
光線の配置と重みはGAUSSWTS()関数で計算しています。

マクロプログラミングの中身に興味がある方は「機能別セミナー」をお勧めします。

例えば、こんな使い方できませんか?

AUTGRIDマクロを応用すれば、下のようなことが出来ます。
  • DELで指定した光線の各面での位置を確認したい!
  • ENT光線の位置をプロットで確認したい!
  • モデルに適切なDELを計算したい!
  • 各面での偏光状態を確認したい!

CODE V のマクロ機能を利用すれば、「こんなことできないかなぁ」がほとんど実現できます。
やりたいことはあるけれど、「プログラミングしている時間がない」とか、「プログラムはどうも苦手で・・・」という方は「光学分野エンジニアリングサービス」をご利用ください。


その他の記事