モンテカルロ法での公差解析を簡単にやりたい!

設計したモデルを実際の製品にする場合、公差解析は避けては通れません。

一般的な公差解析はモンテカルロ法というアルゴリズムを用いています。
これはパラメータに摂動を与えたモデルサンプルを大量に作り、そのひとつひとつの性能を確認していく方法です。そのため実際のケースとほぼ同等の解析が行えます。

このモンテカルロ法による公差解析には弱点があります。それは解析に非常に多くの時間を要することです。
しかもある程度のサンプル数がないと適切な結果が得られないため、時間に余裕があるタイミングでないとモンテカルロ公差解析は実行できません。公差解析は光学設計の流れの中でかなり後半のフェーズですので、設計の締め切りに追われてあまり多くの時間をかけられない場合がよくあります。
さらに光学系を設計するとき公差解析の実行回数は1回ではありません。設計中に何度も公差解析を計算して、製造誤差に敏感でない光学系を目指すはずです。

こんなとき時間のかかるモンテカルロ法を使うのは非効率的です。

CODE Vには強力な公差解析TORが実装されています。
このTORは、モンテカルロ法ではなく、波面微分法というアルゴリズムを採用していますので非常に高速です。モンテカルロ法で何時間もかかる公差解析が一瞬にして終わります。そのためどのあたりの敏感度が高そうか設計の早い段階で判断がつきます。
この高速な公差解析アルゴリズムをフルに活用した、会話型公差解析なる機能もあります。これを使うと「ここの公差をちょっとゆるくしたら、どれくらい結果が変わるか」をすぐに確認することができます。
CODE Vのもうひとつの強力な機能である最適化と組み合わせることで、製造誤差に強い光学系にモデルを最適化できます。
さらに指定した性能劣化量から公差量を逆計算する逆感度解析も可能です。

CODE Vの公差解析TORを使ってみたい方はまず「機能別セミナー」を受講されることをお勧めします。

ユーザー様の中にはTORの使用を躊躇されている方もいらっしゃいます。
確かにわけのわからないアルゴリズムを使って不正確で意味のない結果が出てくるより、実際にモデルに製造誤差を与えているモンテカルロ法は直感的で解りやすいかもしれません。この点に関しては開発元で十分チェックされていますので問題ありません。実際にお使いいただいてその精度をご自身で確認ください。

強力で便利なTORなんですが難点がひとつあります。
それは公差解析の性能評価基準がMTFとRMS、結合効率、偏光依存損失に限られていることです。
コンペンセーションする際もこれらが性能の良し悪しの基準となります。

では、TORで指定できない性能評価基準で公差解析を行いたい場合はどうしたらよいのでしょうか?
コンペンセーションに独自の方法があり、その癖を解析したい場合はどうすればよいのでしょうか?
これが今回、攻略すべきポイントです。


こんなときにモンテカルロ法の出番です。CODE Vには公差解析を行うマクロ“TOLMONTE.seq”が用意されています。

攻略のポイント!

  • 公差解析の性能評価基準はなんですか?
  • どの部分でどのようにコンペンセーションしますか?
TOLMONTEマクロでは性能評価基準もコンペンセーションの方法もマクロで定義できます。
マクロが苦手な方もいらっしゃいますので、ここではできるだけ簡単にTOLMONTEマクロの使い方を説明します。
(わからなくなったらいつでもCODE V技術サポート宛にお問い合わせください)
まずはモデルを読み込んでください。

lister.seq
今回はこんなモデルを例にします。

倍率色収差を確認してみます。


※クリックで拡大します

今回はこの倍率色収差をモンテカルロ公差解析の性能評価基準とします。
性能評価基準をマクロで定義する前に、TOLMONTEマクロを正しく実行できるように、ちょっとモデルを変更します。
変更する前に現在のモデルをファイルに保存しておいたほうがいいかもしれません。

まずはすべての面のアパチャーはユーザー定義アパチャーにしておいてください。
デフォルトアパチャーが設定されていると、TOLMONTEマクロを実行している最中に値が変化してしまい正しい解析ができません。

さらに光軸対称で画角を設定する必要があります。たとえば以下のように片側だけしか画角を設定していない場合は、両側に同じ画角を設定してください。そうしないと光軸に非対称な公差が発生したときにTOLMONTEマクロは正しくコンペンセーションを行えません。

このときビネッティングの設定も忘れずに行っておいてください。
(ちなみにTORオプションではこの設定変更は必要ありません)

ではTOLMONTEマクロで倍率色収差を性能評価基準とするための設定をします。
tollatc.seqなどの名前をつけて以下のようなマクロを書いてください。

tollatc.seq

このマクロ内で必ず設定しなければいけない項目はたったひとつ、性能評価基準をあらわす変数^imagqual(z,f)です。この変数にモンテカルロ公差解析の性能評価基準をズーム位置(z)、画角(f)ごとに定義していきます。たとえば第1ズーム位置、第2画角の性能評価基準は^imagqual(1,2)に定義します。 今回は各画角の像面上での最小波長と最大波長の主光線の差を倍率色収差として性能評価基準を定義していきます。 第k画角(Fk)の最小波長(F1)と最大波長(FL)の主光線(R1)の像面(SI)上でのY方向(Y)の差(ABSF)を第1ズーム位置、第k画角の性能評価基準(^imagqual(1,k))に設定する場合は以下のようになります。 ^imagqual(1,k) == ABSF( (Y Fk WL R1 SI) - (Y Fk W1 R1 SI) )

tollatc.seqでは各画角の^imagqual(z,f)を別々に定義していますが、FORループ処理やデータベースアイテムを利用するともっと単純に記述できます。

そのほかに設定できる項目は以下の4つです。
  • 性能評価基準のラベル : ^description
  • 性能評価基準の値を出力するフォーマット : ^format
  • 性能劣化の方向 : ^degradation
  • エラーのフラグ : ^error
これらはモンテカルロ公差解析の計算自体には直接影響しない設定ですので、とりあえず上の図のように記述しておいてください。
重要なのは^imagqual(z,f)の定義です!

この時点でよくわからなくなってしまった方へ。
もう少しでわかりそうであれば機能別セミナーへご参加ください。一般的なマクロの使い方を習得していただけます。

自分の業務に即したTOLMONTEマクロでのマクロの書き方を具体的に教えて欲しいというご要望があれば、有償技術ミーティングを開催させていただきます。弊社までご連絡ください

マクロについて全くわからない方は光学分野エンジニアリングサービスもございます。どういった公差解析がしたいか弊社までご相談ください。最適な公差解析を実行するマクロを書かせていただきます。ご要望であればモンテカルロ公差解析の結果データも合わせてお渡しします。

次に公差とコンペンセータの設定をします。

公差に関しては通常の設定と同じです。確認>公差メニューから公差を設定してください。 今回は第1面から第9面にデフォルト公差を定義します。コマンドではDEF TOL S1..9です。

次にコンペンセータの設定です。ここでTOLMONTEマクロが使用するコンペンセータは確認>公差メニューのコンペンセータフィールドで設定できないことに注意してください!TOLMONTEマクロでは変数となっているパラメータがコンペンセータとなります。つまり変数がすべてコンペンセータとなります!
まずはすべてのパラメータを固定化してください。現在設定している変数は表示>変数とカップリングメニューから確認できます。そのあとに、たとえばデフォーカスコンペンセータを定義するのであれば、像面の面間隔を変数としてください。

ではこの変数を使ったコンペンセーションの手順を記述したマクロを作成します。今回はtol_comp.seqという名前で以下のようなマクロを記述します。

tol_comp.seq

ここに記述するのは主に最適化の処理です。
そのほかにも独自のコンペンセーション方法があれば、それを記述することもできます! たとえばコンペンセータの動きが連続的でなく、とびとびの値でしか調整できないことはないですか?コンペンセーションのための基準としてのチェック項目が複数ありませんか?像面だけでなく中間像の性能もコンペンセートしなければいけない光学系ではありませんか?コンペンセートする順番が決まってはいませんか?
このtol_comp.seqマクロにそのコンペンセート手順を記述すれば、コンペンセーションの方法による公差の違いまでも確認できます。

では早速TOLMONTEマクロによるモンテカルロ公差解析を行いましょう!
最終的にモデルは以下のような設定になりました。


※クリックで拡大します

変数となっている部分、像面のデフォーカスと第1群のX偏心、Y偏心、がコンペンセータです。

ではこのモンテカルロ公差解析を行うために設定変更したモデルに名前をつけて保存してください。今回はlister_usertol.lenという名前で保存しておきます。

メニューの解析>公差解析>ユーザー定義−モンテカルロ法を選択してください。

レンズファイルフィールドにlister_usertol.lenを指定します。
公差解析を行う性能基準はユーザー定義です。
性能基準を指定するマクロにtollatec.seq、コンペンセーション用マクロにtol_comp.seqを指定してください。
解析回数はまずは100サイクルにしておきます。
各サイクルの確認のため、解析の各サイクルごとの性能をリスト表示にチェックを入れておきます。
そのほかの設定はそのままでかまいません。

OKをクリックしてください。
解析時間はかかりますが、マクロが実行されます。

テキスト出力で各サイクルでの性能評価基準をリストとその結果のサマリ、公差のリストが確認できます。


※クリックで拡大します

同時に性能劣化の累積確率分布をプロットします。


※クリックで拡大します

このプロットですが、がたついていますし、第1画角についてはちゃんとプロットされていません。これは100サンプルの結果を素直にプロットした結果です。これは解析回数を増やせば滑らかな曲線が得られますが、その分時間がかかってしまいます。
今回はこのプロットの曲線をガウシアンカーブにフィッティングするマクロ、TOLPLOTマクロを利用してこのプロットを整形します。マクロが終了した時点で以下のコマンドを実行してください。
TOW IN CV_MACRO:tolplot 'NYYN'


※クリックで拡大します

このモンテカルロ公差解析の結果を横収差曲線にまとめてプロットするとこのようになります。


※クリックで拡大します

(ちなみにこれもマクロでプログラミングして各モデルの横収差曲線を上書きさせています。)

最後にもう一度お伝えしておきます。
CODE Vの公差解析TORは非常に強力です。まずはTORをお試しください。
TORの使い方がわからない方は「機能別セミナー」に参加してください。

こんなときに今回ご紹介したTOLMONTEマクロを利用してください。
  • 性能評価基準がTORでは設定できない!
  • コンペンセーションをもっと細かく設定したい!
  • 時間はいくらかかってもかまわない!

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

TOLMONTEマクロの中身を詳しく見てみると、光学系の設計に役立つこともあります。
CODE Vのインストールフォルダにあるmacroフォルダ内のtolmonte.seqを開いてみてください。

モンテカルロ公差解析というと難しそうですがやっていることは結構単純です。
モデルのパラメータをちょっと動かして、そのときの性能を見ているだけです。

まず、ヘッダー情報とGUIダイアログのための記述があります。
次に変数が宣言されています。ここでグローバル変数GBLとローカル変数LCLが分けて宣言されていることがポイントです。
このTOLMONTEマクロは単体で動いているわけではありません。いろいろなマクロシーケンスを適宜呼び出しながらモンテカルロ公差解析を実行しています。性能基準を指定するマクロやコンペンセーション用マクロもそのひとつです。そこで他のマクロでも共通して使用する変数がグローバル変数として宣言されています。たとえば性能評価基準を格納する変数^imagqual(z,f)がそうです。

そして公差の設定されたレンズファイルを読み込みます。

ここからモンテカルロ公差解析に向けての準備です。読み込んだモデルについて以下を確認しています。
  • デフォルトアパチャーが設定されていないか
  • ピックアップパラメータが設定されていないか
  • 近軸解が設定されていないか
  • 出力ファイバーの位置が設定されていないか
  • 公差の数
  • コンペンセータとなる変数の数
またマクロで使用する変数に指定した値を格納しています。

今回のモンテカルロ公差解析の結果を前の結果と足し合わせる指定がされている場合は前の結果を読み込みます。そしてそのデータからサンプル数の確認や平均値とシグマから合計を逆算します。

そして現在設計値(ノミナル)のモデルの性能評価基準を計算しています。

ここからがマクロのコア部分です。


※クリックで拡大します

以下の処理を指定されている解析回数だけ繰り返します。

まずノミナルのモデルを読み込みます。

次に公差に対応するパラメータすべてにランダムな値の摂動を与えています。このときTSF CHAコマンドを利用します。このコマンドはモデルに摂動を与えることのできる便利なコマンドです。さらにユーザー定義公差が設定されているときは、その公差に対しても摂動を与えます。
そして摂動を与えられたモデルに対してコンペンセーション用マクロを実行します。
この一連の流れが実際の製造工程における光学系を製造からコンペンセーションの流れとなります。

このモデルの性能評価基準を計算します。これが製造品の性能となります。
この結果である性能評価基準の値とノミナルの値との差をリストしています。同時にバッファにも保存します。

平均とシグマを計算するため、これらの合計値と2乗和を計算していきます。

終わりです。

最後に性能評価基準の平均値とシグマ、最大値と最小値をテキスト出力します。今回のマクロのサマリも出力します。指定があれば累積確率分布をプロットや公差をリストします。

最後にファイルへデータをエクスポートしています。

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

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

TOLMONTEマクロを応用すれば、下のようなことが出来ます。
  • 自社独自の性能基準で公差解析をやりたい!
  • 性能を上げるだけでなくもっと複雑なコンペンセーションをやりたい!
  • 公差解析の結果をもっとこまかく見たい!
  • 公差が異常値をとる場合も考慮した公差解析をやりたい!
CODE V のマクロ機能を利用すれば、「こんなことできないかなぁ」がほとんど実現できます。 やりたいことはあるけれど、「プログラミングしている時間がない」とか、「プログラムはどうも苦手で・・・」という方は「光学分野エンジニアリングサービス」をご利用ください。

その他の記事