こんにちは。光学、光でのお困りごとがありましたか?
光ラーニングは、「光学」をテーマに様々な情報を発信する光源を目指しています。情報源はインターネットの公開情報と、筆者の多少の知識と経験です。このページでは、Zemaxコミュニティで注目されているトピックで共有された、DLSのローカル最適化が停滞して困ったときの裏技を紹介します。
Zemaxコミュニティについては、こちらのページ で概略を説明しています。
このページの使い方
このページでは、Zemaxコミュニティに投稿されたトピック中から、よく参照されているもの、コメントが多いもの、筆者が気になったものを取り上げて紹介します。よくある疑問や注目されているトピックについての情報を発信することで、何かしらの気づきとなれば幸いです。
DLSを使った最適化が進まなくなったときの裏技
トピックへのリンク: 新しい最適化手法
光ラーニングの 新最適化アルゴリズムDLSXとPSD_Zemaxコミュニティ注目トピック (9) では、本実装前の試験的な最適化アルゴリズム、DLSX/PSDについて取り上げました。このディスカッションの中では、通常よく使うDLSやOpticStudioの最適化機能全体へのコメントもいくつか投稿されていました。DLSXとPSDとは直接関係ないので、このページで切り出して紹介します。
実戦の光学設計では最適化が停滞する
実戦の光学設計では、トピック内で使用された設計ファイルよりもはるかに複雑なことはよくあります。あるユーザは、マルチコンフィグレーションが20ほど、変数が数百個、最適化オペランドの総数120,000行の規模の設計ファイルを最適化しているとのことでした。これが一般的な数値なのか、筆者にはよくわかりませんが、確かにこれだけ設計空間の次数が大きくなれば、解空間の形状も複雑になって、ローカル解に到達するのは難しそうです。最適化における設計空間、解空間については、最適化は下山?DLSとOD_Zemaxコミュニティ注目トピック (10) も参照してください。
複雑な光学系を最適化する場合、解空間の一部、特に最適解の近くでは、「ここがローカル解です!」といって最適化アルゴリズムが判断するのが難しくなります。イメージは、解空間がお鍋の底のような形状で、さらに表面には小高い丘のような微妙な凸凹がたくさん分布しているような状況でしょうか。DLSは解空間の勾配を頼りにローカル解を探しますが、ちょっと進んだだけで勾配の方向がコロコロと変わってしまって、解空間をウロウロとさまようことになります。感覚的に伝えるためにうねうねした平面として解空間を例えていますが、実際の解空間は数百次元になるので、勾配の方向もそれだけ複雑です。
OpticStudioで最適化を実行するとき、サイクルの回数を選択できます。きわめて複雑な光学系を最適化する場合、「無限」に設定して一晩放置することでより良い解を見つけられる場合があります。ただ、ヘルプファイルでは「自動」が推奨されています。「自動」は、最適化アルゴリズムがメリットファンクションの変動量に対してある閾値を持っており、その閾値を下回る改善量にとどまったときにサイクルを止めるものです。「無限」はその閾値をゼロにして、最適化を強制的に継続させる設定です。
開発部門からのコメントから、DLSXとPSDは「ここがローカル解です!」と決定する部分に強みがあり、「自動」でサイクルをよきところで停止するアルゴリズムのように、筆者には思えます。鍋底のような解空間から、より優れたローカル解を探すのは、やはり容易ではないようです(PSDは可能性があるかもしれない)。なんにせよ、最適化アルゴリズムに複数の選択肢があるのは希望になります。
ハンマー最適化に搭載されたDLS
さて、DLSのローカル最適化を無限サイクルで回して長時間放置しても、メリットファンクションが下がらない状態になったとします。あるユーザは、ハンマー最適化の付帯するDLS機能を使えばローカル最適化が停止した状態を打開できる場合があると示唆しています。
ハンマー最適化の詳細を解説した技術記事はあまりないように思います。実は、ハンマー最適化のウィンドウの中には、ローカル最適化を実行するためのボタンがあります。下図は、入門ガイド 5.3: レンズ データ エディタでの基本光学系の入力 (Zemax技術記事) から引用しています。
そのユーザは、ローカル最適化で動かなくなった状態からでも、このハンマー最適化に付帯するローカル最適化を実行すると最適化が動き始めることのこと。それを踏まえて、複雑な光学系を最適化を以下のプロセスで進めているそうです。
- 通常のローカル最適化を無限サイクルで実行する
- 進まなくなったら、ハンマー最適化の「自動」ボタンでローカル最適化を実行する
- ハンバー最適化を実行する、もしくはローカル最適化を無限サイクルで実行する
- 進まなくなったら、ハンマー最適化の「自動」ボタンでローカル最適化を実行する
ヘルプファイルには、「自動」ボタンは従来のローカル最適化を「自動」モードで実行するボタンとあります。ハンマー最適化は、一度ローカル解に落としてから実行することが推奨されているために、ウィンドウにボタンがついていると理解していました。が、このユーザの経験によれば、通常のローカル最適化と、ここにあるローカル最適化は異なる特性を持っているのかもしれません。そして、解空間のローカル解の探索・到達が困難な複雑な光学系を最適化においては、その違いが結果の違いを生んでいるのかもしれません。筆者は試したことがありませんし、もちろんヘルプファイルにそのようなことは記載されていません。また、このトピックでこの点が深くディスカッションがなされなかったので、真相は不明です。
最適化を一度止めてもう一度実行する
また、他のユーザからは、ローカル最適化が停滞した後に、一度最適化を停止して、再度スタートすると最適化が動き始めると言及しています。この意見も、変数が20以上の時の経験則に基づいているとのことです。最適化の最初と、最適化の終盤では、何らか最適化の進み方に変化がついている可能性が考えられます。
最適化のソースコードのパラメータか?
MarkさんのOpticStudioの最適化に関するコメントの中で、「最適化のコード内には、ユーザがアクセスできない調整可能なパラメータが存在し、その調整具合によって最適化の結果や収束特性は変わる」と明かされました。
Markさんからのコメントは「OpticStudioソースコードにある最適化コードのパラメータを調整することで、特定のファイルに対する最適化の性能を上げることが可能なのはわかっていました。しかし、その調整は狙ったファイルに対する性能は改善しても、他のファイルに対する性能を劣化させる結果になります。現在のソースコードの設定値は、それらの妥協点です」。
新最適化アルゴリズムDLSXとPSD_Zemaxコミュニティ注目トピック (9) (光ラーニング)
このことは、最適化の停滞に困っているユーザにとっては注目すべき点となります。上級者向けに最適化パラメータを調整可能にするのはどうか?といった声や、ハンマー最適化のDLS最適化の詳細、ローカル最適化のもう少し踏み込んだ説明を求める声もありました。最適化は設計ソフトウェアの超重要機能なので、これを開示するのは難しいことのようには思いますが、無理のない範囲での状況提供はユーザにとって有益です。経験則に頼ったノウハウに依存するよりは、参考情報が欲しいと感じます。
これは筆者の個人的な推察になります。一般的に最適化は、変数を連続的に調整するのではなく離散的に動かします。そのステップの幅は最適化の進行状況によって調整され、最初は大きく動かし、徐々に小さくなるように変化していきます。つまり、最適化の終盤になるほど、細かいステップでローカル最適解を目指すので精度は高くなりますが、ステップが細かい分、そのローカル解から抜け出すことはできなくなります。ハンマー最適化に付帯するDLS最適化、いったん止めて再度始めたローカル最適化は、このステップ幅が大きくなっているのではないでしょうか?つかまっていたローカル最適解のくぼみから、比較的大きなステップで変数を調整することで抜け出し、隣のローカル最適解のくぼみに移動できた結果、最適化が再び動き始めることはあり得る話と思いました。この状況は、解空間のローカル最適解周辺が鍋底のような平坦に近く、さらに低い凹凸が広く分布していると発生しやすいです。
まとめ
このページでは、Zemaxコミュニティに投稿された「新しい最適化アルゴリズム DLSXとPSD」から、「DLSのローカル最適化で困ったときの裏技」をトピックに取り上げました。ハンマー最適化の「自動」ボタンでローカル最適化を実行するか、ローカル最適化を再度開始することで、停滞していた最適化が動き始める可能性が、複雑な光学系の最適化に取り組むユーザから示されました。理由は分かりませんが、筆者は最適化のステップ幅に起因しているのではないかと思います。最適化でメリットファンクションが下がらずに困っているとき、これらの裏技を試してみる価値はあります。
コメント