こんにちは。光学、光でのお困りごとがありましたか?
光ラーニングは、「光学」をテーマに様々な情報を発信する光源を目指しています。情報源はインターネットの公開情報と、筆者の多少の知識と経験です。このページでは、OpticStudioシーケンシャルモードで最適化を行う際の、基本3ステップについて説明します。
このページの使い方
このページで参考にした技術記事(ナレッジベース)は、 シングレット レンズの設計方法 パート3 です。この記事は、OpticStudioのシーケンシャルモードでシングレットレンズ(単レンズ)を設計するプロセスのうち、最適化を紹介した入門記事になります。
このページでは、ナレッジベースで使われている光学用語、技術用語、前提知識について、もう一歩踏み込んだ説明を加えていきます。ナレッジベースの長さは記事によってまちまちなので、いくつかのブロックに分けて注釈を加えています。この記事は10番目です。(9)は 光路差図(波面収差)_シングレットレンズの設計(OpticStudio入門) です。
OpticStudioでの最適化の基本ステップ
光学設計における最適化とは、「ある目標の光学性能を達成するために、一定の制約条件化において、その目標に最も近づくパラメータの組み合わせを見つけ出すプロセス」です。最後にある組み合わせを見つけ出すプロセスはPCとOpticStudioが実行してくれますが、私たち設計者には目標を決めたり、制約条件を設定したりといった重要な仕事があります。設計者の仕事は、OpticStudioが適切な光学設計に到達できるように環境を整えることです。もはや、設計者とOpticStudioのどちらがどちらを使っているのか、よく分からない状況ではありますが、少なくとも、「”最適化はOpticStudioに任せっきりでOK”というプロセスではなく、設計者とOpticStudioの二人三脚によって進められる共同作業である」という認識が重要だと思います。
ここからは、OpticStudioの自動最適化(よく単に”最適化”と呼ばれる)について、基本となる3ステップについて説明します。最適化の進め方の概要を把握できれば、最適化プロセス中における、OpticStudioとのコミュニケーションの取り方が見えてくるかもしれません。
最適化の目標を決める
最初のステップは、最適化の目標を決めることです。最終的には1つの数値に集約されますが、複数の目標を同時に設定できます。メインとなる目標は、所望の光学性能を達成することになります。例えば、スポットサイズを最小化することだったり、波面収差を最小にするだったり、平行光になるように光線の入射角度のばらつきを最小にすることです。そこに、光学部品の厚みやエッジがマイナスの値にならないように制約条件を追加したり、焦点距離を所定の範囲に収める、特定の周波数のMTFを最大化するなど、トッピング的な目標を追加する場合もあります。
目標を設定する場所が、後述するメリットファンクションエディタになります。
変数を決める
次のステップは、最適化中の変数となるパラメータを決めることです。よく変数とするのは、曲率半径、厚み、非球面レンズを使用していれば非球面係数などです。どのパラメータを変数とするかは悩みどころで、王道はありますが正解はありません。変数とできるパラメータをすべて動かすのが良い、とは一概に言えないのが難しいところです。変数の選択は、理論的な判断、経験的な勘、設計のステージによって、増やしたり減らしたり変更したりします。
パラメータを変数とするのは、ソルブ機能で設定します。パラメータの右側の小窓に「V(Variable)」となっていれば、最適化中のパラメータ調整の対象になります。
最適化のアルゴリズムを決めて実行する
最後のステップは、最適化の実行です。設計者が行うのは、最適化アルゴリズムの選択です。ヘルプファイルには記載されていない試験的なアルゴリズムも含めると、DLS、OD、DLSX、PSDの4つから選択します。シーケンシャルモードの場合、ひとまずDLSを選択するのが王道です。最適化のアルゴリズムについては、New Optimization Methods (Zemaxコミュニティ) で活発な議論が行われていました。このコミュニティトピックは、またの機会に光ラーニングでも取り上げたいと思います。
(新最適化アルゴリズムDLSXとPSD_Zemaxコミュニティ注目トピック (9) (2021/11 追加) と、最適化は下山?DLSとOD_Zemaxコミュニティ注目トピック (10) (2021/11 追加) も参照してください。)
最適化が停止したら、レンズの形状や光学特性、メリットファンクションで設定したトッピングの最適化の目標を確認します。そして、最初のステップに戻ります。メリットファンクションエディタの設定を編集し、変数を適宜変更して、再度最適化を実行します。光学性能の仕様や製造的な条件を達成するまで、このステップを繰り返します。
評価関数 / メリットファンクション
OpticStudioでの最適化中、設計者の作業はほぼ目標の構築と微調整(メリットファンクションの設計)に費やされます。ここで、言葉の定義を確認しておきます。
評価関数(メリットファンクション): 最適化の目標そのもの。1つの数値。
メリットファンクションエディタ: 最適化の目標を設定する場所となるスプレッドシート。
メリットファンクションエディタ
メリットファンクションを出力するメリットファンクションエディタは、レンズデータエディタと同様にエクセルような構成をしています。1行ごとに小さな最適化の目標を追加していき、それらの集合体として1つの大きな目標(メリットファンクション)を構成します。1行ごとに設定する目標のラベルのような、アルファベット4文字からなるオペランドをタイプ(Type)列に入力します。OpticStudioには非常に多くのオペランドが存在しますが、すべてのオペランドを覚えておく必要はありません。筆者もよく使うオペランドを数個を覚えている程度で、あとは「確かこんな結果を出力するオペランドがあったな。」という程度の記憶を頼りに、都度ヘルプファイルを確認しながら設定していきます。「こういう数値を目標にしたいなと思えば、だいたいオペランドが用意されている」くらいに考えてもいいかもしれません。
各オペランドには、目標値(Target)、重み(Weight)、現在値(Value)、寄与率(% Contrib)の列があります。
- 目標値: 各オペランドに実現してほしい値です。
- 重み: 各オペランドの重要度の設定です。大きな値を設定するほど、最適化中にこの目標を達成するように最適化が進行します。極端に大きな重みをかけると、最適化自体が動かなくなる場合もあるので、いかに”ほどほど”の設定ができるかが肝になります。
- 現在値: 現状の光学設計が達成する、各オペランドの数値です。
- 寄与率: 最適化が各オペランドにどのくらい引っ張られたかを示した値です。メリットファンクションエディタの調整に向けて、設計者に重要な指針を与えます。例えば、1つのオペランドが大きな寄与率を占めている場合は、そのオペランドに最適化が強く拘束されている可能性があるので、寄与率が大きくなりすぎないように調整します。
例えば、11行目のTRCXオペランドは、特定の光線の横収差を出力するオペランドです。目標値がゼロで、横収差がない状態を目標に設定しています。今の光学系での横収差の現在値は0.185です。メリットファンクションの計算では単位は無視されることに注意してください。um単位のオペランドも、mm単位のオペランドも数値だけで計算されます。重みは0.291で、重みが1.0のオペランドと比較すると、メリットファンクション計算時に数値が29%に調整されます。それでも寄与率が8.19%なので、このオペランドは最適化において比較的重要視されている、このオペランドの目標を達成することに注力していることが分かります。設計者は寄与率を頼りに重みを調整することで、最適化の動きを誘導します。
最適化の目標=最小のメリットファンクション
メリットファンクションエディタのすべての行で、現在値が計算され、目標値との差分が計算され、それに重みによる調整が入ったのち、それらを積算することで、メリットファンクション(図 44-3でエディタの上部に表示された0.09924…)が算出されます。このページでは計算式には触れませんので、まずはOpticStudioのヘルプファイルを参照してください。
つまり、メリットファンクションは現在の光学系が目標に対してどれだけ離れているかを示した値です。数値の大小は重要ではありません。オペランドの出力する値が大きければメリットファンクションも大きくなりますし、逆もしかりです。最適化では、変数に設定されたパラメータを微調整しながら、メリットファンクションがより小さくなるような組み合わせを探します。メリットファンクションがゼロになったということは、メリットファンクションエディタの各行に設定された小さな目標をすべて達成したことを意味します。
最適化を行うときの心構え
参考までに、筆者の個人的な心構え、というか心しておきたい(ヘルプファイルにも記載されている)最適化の特性を簡単に説明します。
初期値によって最適化の結果は変わる
最適化の一般的な特性として、初期状態によって到達できる最適解が異なります。特に、ローカル最適化と呼ばれる、局所的な最適解を求めるアルゴリズムでは初期値によって到達できる解が決まってしまうので、筋の良さそうな状態から最適化を実行する必要があります。「筋の良さそう」というのがぼんやりとした表現ですが、伝統的な設計であれば、いわゆる光学設計理論に基づいた初期値を選択するのが王道です。過去の設計資産が重宝されたり、マシンパワーによる力業の設計も可能な時代に光学の知識が要求されるのは、こういった事情があります。
最適化の組み方で実行速度は顕著に変わる
同じような目標を設定するにしても、メリットファンクションエディタの設定方法は無数にあります。効率的なメリットファンクションエディタを構成できれば、最適化の1回の試行にかかる時間が短くなります。何万通りもの変数の組み合わせでメリットファンクションを計算するので、ちりつもで最適化の実行時間は大きく変わります。例えば、MTFと光線の横収差の計算では後者の方が圧倒的に早いですし、過剰に光線をサンプリングするのは光学性能の解析精度は変わらないのに時間ばかりがかかります。メリットファンクションエディタに無駄がないか、効率化できないか、常にチェックします。
メリットファンクションがゼロ ≠ 完璧な設計
苦心した最適化の結果、メリットファンクションがゼロにきわめて近い設計に到達できたとしても、それは設計者が作成した小さな目標たちをクリアしている、ローカルの最適解にすぎません。別の視点からの検討が不足しているケースも十分考えられます。最適化中、目の前のメリットファンクションの動きに注目しすぎず、目標設定に過不足がないかを常にチェックします。
まとめ
ここでは、Zemaxのホームページからアクセスできる公開記事、 シングレット レンズの設計方法 パート3 から、「OpticStudioの最適化の基本ステップ」について説明しました。現代の光学設計者は、いかにソフトウェアの最適化を自分たちの欲しい最適解まで誘導するかを日夜考えています。次回は、最適化の目標設定の自動化に大変役立つ、「最適化ウィザード」ついて説明します。
コメント