問題タブ [differential-evolution]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - ヤコビ行列の疑似逆行列の問題
私は、勾配ベースの突然変異アルゴリズムを使用した E-Constrained Differential Evolution (高浜、2006) を実装しています。突然変異の部分では、試行ベクトルの各制約関数の勾配を計算して、ヤコビ行列を定義する必要があります。私は有限差分によってそれをやっています。行列はmxnである必要があることを理解しています.m =制約の数とn =次元数(試行ベクトルの長さ)です。試行ベクトルの摂動は になりますpseudo-inverse_of_Jacobian x delta_C
。何が問題なのかわかりませんが、オペランドを形状 (4,5) (5,1) と一緒にブロードキャストできませんでしたというメッセージが表示されます。助けていただけますか?この乗算は 4x1 配列を生成するべきではありませんか? ありがとう。
以下に、私が解決しようとしている問題の例に関連する定義を示します。
記事のテキスト:
python - Python: scipy.optimize.differential_evolution のマルチプロセッシング機能を使用して辞書を共有する
モジュールを使用して最適化問題を実行していますscipy.optimize.differential_evolution
。私が書いたコードは非常に複雑で、私が抱えている問題を要約しようとします:
- 目的関数は外部数値モデルを使用して計算されます (つまり、解析関数を最適化していません)。そのために、モデルを実行する特定の関数と、結果を後処理する別の関数を作成しました。
- いくつかの制約で問題を制限しています。制約は、問題の実際のパラメーターを制約していませんが、外部数値モデルのシミュレーションの最後にのみ取得できるいくつかの従属変数を制約しています。各制約は個別の関数で定義されました
2. の問題は、外部モデルが同じパラメーターのセットに対して 2 回実行される可能性があることです。1 回目は目的関数を計算し、2 回目は制約について評価される従属変数を計算します。それを回避してコードを高速化するために、外部モデルが呼び出されるたびに、パラメーターの各セットの従属変数の結果を (ルックアップ テーブルとして) 保存するグローバル ディクショナリを作成しました。これにより、制約を評価する関数が同じパラメーターのセットに対してモデルを再度実行するのを防ぎます。
これは、単一の CPU 最適化を使用する場合に非常にうまく機能します。differential_evolution
ただし、オプション「workers」に適切な値を設定することにより、関数がマルチプロセッシングも許可することを理解しています( https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.differential_evolution. html#r108fc14fa019-1 )。私の問題は、マルチプロセッシング機能を有効にしたときにグローバル/共有変数を更新する方法がわからないことです。
上記のWebページに
は、「ワーカーがintの場合、母集団はワーカーセクションに細分され、並行して評価されます(使用multiprocessing.Pool
)[...]」
したがって、共有変数を使用するときに変更する方法を見つける必要があると推測しましたmultiprocessing.pool
。この点で、私はこれらの解決策を見つけました:
multiprocessing.Pool がグローバル変数を変更できないのはなぜですか?
私の場合は最後のものが適切だと思います。ただし、コードとdifferential_evolution
関数の worker オプションをどのように設定する必要があるのか わかりません。どんな助けでも大歓迎です。
私のコードは次のようなものです:
上記のコードは、単一のコアで動作します。辞書 dict_obj と dict_dep_var を共有する解決策を試しています
c++ - PAGMO2 バッチ フィットネス評価を単一目的微分進化問題に適用する
PAGMO の Batch Fitness Evaluation を重い単一目的差分進化問題でどのように活用すればよいか理解できません。
プロセスを高速化するために、BFE の形でマルチスレッドを使用したいと考えています。
コード:
上記は私が試した BFE の実装ですが、期待どおりに正しく動作していません。
私はPythonの実装を見てきましたが、それは基本的にbfeをアルゴリズムに適用しているだけです。
C++ のドキュメントに従って、問題とベクトルのリストを提供します。これは私には少し混乱します。
- BFE はどのアルゴリズムが使用されることになっているのかをどのように知るのでしょうか?
- BFE に渡す一連のベクトルを生成するにはどうすればよいですか?