高価な目的関数のグローバルな最大化


12

私は世界的に多くの機能(最大化に興味を持ってい)実数パラメータ(複雑なシミュレーションの結果を)。ただし、問題の関数の評価は比較的高価で、各パラメーターセットに約2日かかります。私はさまざまなオプションを比較しており、誰かに提案があるかどうか疑問に思っていました。30

この種のプロセスには、近似関数を開発し、それらを最大化する一連のメソッドがあることを知っています(例:Jones et al。 "高価なブラックボックス関数の効率的なグローバル最適化")。ただし、これはコードに比較的関与しているようです。

多数のシミュレーション(50以上)を並行して実行できます。これは、遺伝的アルゴリズムのようなものを使用してこの最適化を行うことを示唆しているようです。

私の質問は次のとおりです。1)この種のグローバルソルバー/推奨の自由に利用可能な実装の経験はありますか?2)ここで遺伝的アルゴリズムを好むまたは避ける理由はありますか?

これは物理的な問題であり、初期の実験では、パラメータを変更すると性能指数がかなりスムーズに変化することが示されました。

更新:

お手伝いありがとう!いくつかの詳細:最大の場所以外の情報は必要ありません。シミュレーションはモンテカルロではなく決定論的であるため、複雑さは大した問題ではありません。パラメーターに明示的な境界または制約はありません。私が持っている(そして前に言及しなかった)もう1つの情報は、必要な最大サイズの感覚です。私はグローバルな最大値を探していますが、この規模以上の何かに満足しています-これが助けになるかどうかはわかりません。より体系的にスクリーニングを行うと(ブライアン・ボーチャーズが示唆するラテン・ハイパーキューブ)、うまくいけばうまくいきます。


目的関数を評価するとき、特に追加情報を生成しますか。パラメータに関する微分(または近似)?目的関数自体は計算に費用がかかるため、補足情報のためにそのような計算を搾り出す必要があるかもしれません。
-hardmath

(一年後)、あなたは何をしましたか?30のパラメータのうちのいくつかを変えて、モデル...?
デニス

denis:いくつかの物理的な直観(および運)を使用して最も重要なパラメーターを推測し、それらを変更して「十分な」結果を得ることができました。(この場合、正確な最適値を見つけることは、十分な大きさの答えを見つけることほど重要ではありませんでした。)これらの手法の全力を必要とすることはありませんでしたが、それらを手元に置いておくのは良いことです。
AJK

確かにこれは2年半前ですが、目的関数の評価(決定論的シミュレーション)で精度レベルを選択できますか?精度と実行時間をトレードオフできますか?
マークL.ストーン

回答:


11

目的関数の評価に非常に費用がかかる場合、遺伝的アルゴリズムは非常に貧弱な選択肢です。これらの方法では、各世代で多くの関数評価(並列処理が役立ちます)および多くの世代(本質的にシーケンシャルです)が必要です。世代ごとに、これは非常に遅いでしょう。

あなたはこの問題がどこから来たのか言及していません。尤度曲面を統計的に分析していますか(この場合、最適なパラメーターと目的値以外のものが必要です)、または単に目的関数を最適化していますか?

目的関数の計算が正確か不正確かについては言及していません。目的関数がモンテカルロシミュレーションによって計算される場合、値は非常にノイズが多いことがよくあります。これは、多くの最適化アルゴリズムを誤解させる可能性があります。応答曲面法は、ノイズを滑らかにすることでこの問題を解決します。

パラメーターに関する制約については言及していません。彼らは制限されていますか?パラメーター間に線形または非線形の制約はありますか?

30個のパラメーターのほとんどは、実際には問題にとってそれほど重要ではない可能性があります。実験デザインスクリーニングアプローチを使用して、最初に30個のパラメーターのどれが最適化で本当に重要かを判断し、重要でないパラメーターに適切な値を設定した後、重要なパラメーターを最適化することをお勧めします。ラテンハイパーキューブサンプリングのようなメソッドは、比較的重要でないパラメーターを選別するのに非常に役立ちます。このスクリーニング段階では、数百のプロセッサーを簡単に利用できます。

パラメーターの数をより合理的なサイズに減らした後、応答曲面法を使用して残りのパラメーターを最適化します。応答曲面が実際にマルチモーダルであり、非常に単純な応答曲面モデル(通常は2次モデルにちょうど当てはまる人)を使用すると、誤解を招きやすく、グローバルな最大値を逃す可能性があります。注意してください!この段階では、パラメータ空間を非常によくカバーする実験的な設計を使用することで、多くのプロセッサを再び使用できます。近似モデルが計算値から大きく外れている設計点を探します。これは、その領域で応答曲面がうまく機能していないことを示しています。パラメーター空間の別々の領域に応答曲面を構築する必要がある場合があります。

最後のステップとして、応答曲面最適化のパラメーターから開始し、一度に1つずつ調整することにより、選別されたパラメーターの値を改善しようとします(座標降下)。

この種の最適化のフレームワークとして、DAKOTAの推奨を2番目に取り上げます。この最適化を一度だけ行う場合は、手作業で計算を整理する方が簡単かもしれませんが、繰り返し行う場合は、DAKOTAが非常に役立ちます。


4
  1. 私はこれらの種類のソルバーの経験はありません。私の同僚の何人かはそれらを使用しました。DAKOTAは、これらの種類のタスクに推奨されるソフトウェアパッケージのようです。ユーザーがジョブをサブミットキューに繰り返しサブミットし、パラメータースタディ、感度分析などに出力を使用できるようにするインターフェイスが含まれています。多くのシミュレーションを実行することを活用するかどうかを知るのに十分な知識がありません同時に。

  2. パラメーターが連続的であると仮定すると、パラメーターの変化に応じて性能指数がスムーズに変化する場合、代理モデルは性能指数を適合させる合理的な作業を行う必要があり、代理派生情報は収束の改善に役立つはずです。30個のパラメーターの場合、決定論的な導関数のない最適化手法も有用です。再び、滑らかさが役立つはずです。対照的に、遺伝的アルゴリズムは派生情報をまったく使用せず、良好なパフォーマンスを実現するために、突然変異率、組換え率、選択パラメーターなどのパラメーターの調整が必要になることがよくあります。アルゴリズムの選択として、フォールバックとして遺伝的アルゴリズムを使用します。これは、適切に設計された代理最適化または決定論的な微分のない最適化手法がより良い収束動作を期待するためです。


決定論的な導関数のない最適化手法を使用するのが賢明ではないかもしれないいくつかの理由。第一に、これらはローカルの最大値を見つけて、パラメータ空間の他の場所でより良い点を見逃してしまうローカル検索方法です。第二に、これらのメソッドは通常、反復あたりの関数評価が比較的少ない多数の反復を必要とするため、並列化がうまくいきません。
ブライアンボーチャーズ

あなたはローカル検索方法について正しいです。代理モデルを構築せず、ローカル検索方法よりも優れた動作をするグローバル検索方法(直接、分岐限定、マルチレベル座標検索)があります。これらの方法を並列化することの有効性について話すことはできません。
ジェフオックスベリー

1

ブラックボックスの最適化については、TOMLAB、DAKOTA、およびOpenMDAOをご覧ください。


編集#3:ベイジアン最適化はEGOに非常に似ています:

https://github.com/mwhoffman/pybo

https://github.com/hyperopt/hyperopt

制限付きライセンス:

https://github.com/rmcantin/bayesopt

https://github.com/HIPS/Spearmint


編集#2:

最初のアプローチは、高価な関数を中心にメタモデル/サロゲート(クリギング/ GPを使用)を構築し、この追加情報を使用して、より少ない評価(EGO)でグローバルな最適点を見つけることです。

MDASの場合の2番目のアプローチは、複数のレベルで巧妙な適応を行って直接検索することです。

ヒューリスティックアプローチは、本質的に遺伝的/ランダム化されており、保証はありません。


編集#1:

TOMLABは、Sahinidisの論文によると、最適化の最高の速度/品質を備えたMATLABベースのツールです。しかし、これは企業で大々的に使用される商用ツールです。私はこれを使用していません。

DAKOTAは、一般的な最適化に加えて、不確実性の定量化により適しています。C ++およびいくつかのレガシーFortranコードに基づいています。LGPLライセンスおよびダウンロード可能なバイナリの下ではありますが、少なくともGCCまたはMSVS / ifortを使用したWin7での経験から再コンパイルすることは非常に困難です。ビルド用のboost、lapack、cmakeに依存しています。基本的に、これは多数のオープンソースソルバーといくつかの商用ソルバーのラッパーです。これはSNL製品であり、Sandia NLの他のプロジェクトと緊密に統合されています。いくつかのIMSLルーチンの代わりに、これを正常に統合することができました。Sahinidisの論文は、DAKOTAで可能な大規模な並列性を逃しました。

OpenMDAOは、APACHEライセンスの下でNASAによってPythonで開発された最適化ベースの設計ソフトウェアです。私は現在これを試しています。


SciCompへようこそ!現在書かれているように、あなたの投稿では、なぜTOMLABまたはOpenMDAOを見るのが良いアイデアなのかを実際には説明していません(他の回答はすでにDAKOTAについて議論しています)。推奨事項を提供するだけでなく、それらの推奨事項が役立つ理由、潜在的な落とし穴などを説明する回答を探しています。
ジェフオックスベリー14年

私は最初に答えを急いで、今、説明を追加しました。
denfromufa 14年

0

各パラメーターが1つずつ異なる30回の実行ができない場合は、グループごとに変更します。
たとえば、4つのパラメーターがそれぞれ異なる8つの実行を行い、次に最適な2つの実行/ 8つのパラメーターを調整します...
(トレードオフの方法はわかりません情報取得時間対総実行時間、 マルチアームバンディット?)


-3

以下は、マルチコアCPUを使用して高価なブラックボックス機能を効率的に最適化できるコードです。

コードの背後にある数学の説明をここに示します


1
これは、この投稿で提供したものと同じ答えです。また、これはあなた自身の仕事のようです。それが当てはまる場合は、回答に明示的に記載してください。
ニコグアロ

論文に記載され、ソフトウェアに実装されているアプローチの詳細を提供できますか?使用されている方法は何ですか?なぜそれが良いのですか?このアプローチでは、他の回答ではカバーされないものは何ですか?
ニコグアロ

1
また、あなたはこのソフトウェアの作成者であることに言及してください。したがって、これを読んでいる人は、a)あなたが話していることを知っており、b)少し部分的であるかもしれないことに気付くでしょう。
クリスチャンクラソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.