こんにちは。光学、光でのお困りごとがありましたか?
光ラーニングは、「光学」をテーマに様々な情報を発信する光源を目指しています。情報源はインターネットの公開情報と、筆者の多少の知識と経験です。このページでは、Zemaxコミュニティで注目されているトピックから、最適化中に設定するメリットファンクション重みを取り上げます。
Zemaxコミュニティについては、こちらのページ で概略を説明しています。
このページの使い方
このページでは、Zemaxコミュニティに投稿されたトピック中から、よく参照されているもの、コメントが多いもの、筆者が気になったものを取り上げて紹介します。よくある疑問や注目されているトピックについての情報を発信することで、何かしらの気づきとなれば幸いです。
メリットファンクションの重み (Merit Function weight definition)
トピックへのリンク: メリットファンクションの重み定義と最適化の問題
質問の内容は、OpticStudioの最適化で設定するメリットファンクションエディタの「重み」のパラメータの決め方でした。重みは、私たちの意図をOpticStudioに伝える大事なパラメータなので、最適化中に調整することも多いです。
ディスカッションの内容
質問者は、最適化オペランドごとの重みを、特に大事なオペランドは100、そこそこ大事なオペランドは10、そこまで大事じゃないオペランドは1、といった具合に設定しているそうです。この設定方法の妥当性や重みの最大値についての説明を求めていました。他にも、GPBS、FICL、ハンマー最適化に関する質問も記載されていましたが、このページでは「重み」に注目します。
Markさんから、メリットファンクションのオペランドのウェイト設定に関するコメントがありました。
1つ目は、最適化ウィザードで生成されたデフォルトメリットファンクションの重みは触らないことです。重みを編集するのは、デフォルトメリットファンクションより上の行に追加した、オリジナルの最適化オペランドの重みのみです。最適化ウィザードについては、最適化ウィザード_シングレットレンズの設計(OpticStudio入門) (11) を参照してください。ウィザードで生成されたオペランドの重みは、OpticStudioの設定を考慮して慎重に決定されています。少なくとも、最適化ウィザードの動作を十分に理解する必要があります。また、視野や波長の設定を変更したときに、デフォルトメリットファンクションを再作成するのを忘れないように。
2つ目は、メリットファンクションの重みを調整する前に、視野エディタと波長エディタの重みを調整することです。デフォルトメリットファンクション前に追加したオペランドの結果を見て、特定の視野の重みを増減させても、デフォルトメリットファンクション内部のウェイトが変わらないと、最適化の全体的な方針が変わりません。よって、視野と波長の重みを調整し、最適化ウィザードでデフォルトメリットファンクションを再作成します。
3つ目は本題の重みの数値に関するコメントです。Markさんの意見では、重み100は避けることを推奨しています。重み5-10程度で最適化が思ったように進行しないのであれば、重みをそれ以上大きくしても最適化が正常に(望んだように)進む可能性は低いです。
重みに関するヘルプファイルの説明
オペランドの重みを0未満、負の値にするオプションがあります。この設定は、ラグランジュ乗数という(筆者が?)聞きなれない技術を導入します。もちろん、光ラーニングでは詳細に触れません。インターネットで、「ラグランジュの未定乗数法」で検索してみてください。
効果だけを簡単に説明すると、「重みが負の値で設定されたオペランドがある場合、その目標値を達成する設計解に収束する」ような最適化アルゴリズムが使用されます。これだけ見ると、非常に強力なオプションに思えますが、ヘルプファイルではラグランジュ乗数の使用は可能な限り控えるようにと釘がさされています。通常の正の値の重みを非常に大きくすることと似ていますが、「その設計解が存在していることが前提」になるので、「達成困難な目標になるべく近づけたいからラグランジュ乗数を使用する」というのは正しい使用方法とは言えない気がします(自信なし!)。
筆者の考え方
重みの調整では、重みの数値自体をどうするか(5にするか100にするか)というより、各オペランドの寄与率をヒントに判断しています。まずは、オペランドの出力する数値が他と比べて桁が違うほど大きくないかを確認します。桁は同じ程度なのに、大きすぎる寄与率を持つオペランドがある場合は、寄与率を下げるように重みを調整します。
必要に応じて演算オペランドを使用して、逆数を取ったり、定数で除算するなどして桁を落とすこともあります。このオペランドの出力値に算数的に手を加える方法は、最適化を誘導するうえでよく使うテクニックです。
王道はあるが、正解はない
最適化の進め方に、「コレ!」といった正解はありません。「過去の経験上こうすると良い結果に比較的到達しやすい」といった王道はあります。Markさんのコメントのような、重みの使い方についても同じことが言えます。筆者個人としては、最適化を誘導するうえで「大きな重み」はあまり使いません。最初は1から初めて、徐々に増やす感じです。一般的な傾向として、大きすぎる重みを設定すると最適化が止まってしまってしまう状況に陥りやすい傾向があると感じているからです。ただ、世の中には重みの制御を活用した最適化の誘導によって、素晴らしい解に到達したケースもあると思います。
まとめ
このページでは、Zemaxコミュニティに投稿された「メリットファンクションの重みの設定」に関するトピックに取り上げ、説明を加えました。基本方針として、デフォルトメリットファンクションの重みは編集しない、オリジナルの最適化オペランドでも1000のような極端に大きな重みの設定は避ける、重みをマイナスにする裏技がある、といった最適化のヒントがありました。
コメント