はじめに
OptiStruct の最適化アルゴリズムは、ひたすら目的関数が下がる方向を目指して下り続ける、というアルゴリズムです (最大化の場合は、上り続ける)。
高速で正確な処理ができる反面、下図のように、極値が複数ある問題に対して、スタート地点で、たどり着ける先が決まってしまいます。下ることはできても、上ることができないからです。最適化の世界では、多峰性問題などとも呼ばれます。
(絵が下手ですみません)
この問題を回避する一つの手法として、OptiStruct では、グローバルサーチオプション (GSO) という機能を用意しています。要は、ユーザー指定の初期値からのみ探索をするのではなく、いろいろなスタート地点を OptiStruct が自動的に用意して、いろいろな極値を見つける、というものです。
本記事では、簡単な例題を一つ示します。
例題
ダウンロード:
一応 FEM モデルが入っていますが、分かりやすくするために、最適化は FEM に無関係な数式を解くという形式にしています。
y=(x-1)(x-1.5)(x-2.5)(x-4)
という式の最小値を 0≦x≦5 の範囲で、探索します。
この関数は、このような形になります。x=1.25 と 3.5 のあたりに極値がありますが、値が小さいのは、つまり最適解として優秀なのは x=3.5 のほうです。しかし、もし x=0 とか x=1.5 とかから探索を始めてしまうと x=1.25 のところに至ってしまいます。
カードの構成です。
普通に最適化を走らせてみる
フォルダ 0101_start_0.0 が、普通に最適化を走らせるモデルです。初期値は x=0.0 です。
最終イタレーションで x=1.215 となりました。見事に、よくない方の極値にはまってしまいました。
グローバルサーチを有効にしてみる
0102_dglobal フォルダに入っているのがグローバルサーチ (GSO) を有効にしたものです。
使い方は非常に簡単で、BULK セクション (BEGIN BULK より下) に、"DGLOBAL, 番号"と書き、ファイルの頭のほう、SUBCASE よりも上に、"DGLOBAL=先ほどの番号" とするだけです。
実際、BULK セクションの DGLOBAL はいろいろなパラメータがありますが、デフォルト値でたいていの場合はうまく動きます。
実行すると、フォルダが 2個できていますが、この中に、それぞれ、異なるスタートポイントの最適化ランの結果が入っています。この数は、峰の数に依存します。今回は、峰が 2個ですから、フォルダも 2個というわけです。
また _gso.slk というエクセルファイルがありますが、こちらが、最適化のサマリになります。
x=3.5 付近の真の最適解を見つけることに成功しています。