2

理論的予測を実験データに適合させるコードが少しあり、理論を実験に適合させるために LMA (Levenberg-Marquardt Algorithm) を実行したいと考えています。ただし、計算は簡単ではなく、各モデルは単一のプロセッサで計算するのに約 10 ~ 30 分かかります。クラスター コンピューター (この計算にはまだ 1 ~ 2 分かかります)。

現在、この送信スクリプトは Python 内の呼び出し可能な関数内に設定されています。したがって、scipy LMA (scipy.optimise.leastsq) を使用して設定するのは比較的簡単です。ただし、scipy LMA は、個々の計算を渡すと思います (私は、LMA が一度にすべての計算セットを送信してから、戻りを待つことを好みます。Python 送信スクリプトは次のようになります。

def submission_script(number_iterations,number_parameters,value_parameters):
      fitness_parameter = [0]*number_iterations
      <fun stuff>
      return (fitness_parameter) 

「value_parameters」は、モデルごとに計算される変数を含む次元 [number_iterations][number_parameters] のネストされたリストです。「number_parameters」は、適合されるパラメーターの数であり、「number_iterations」は数です。計算されるモデルの数 (したがって、各ステップで勾配を測定するために、LMA は 2*number_parameters モデルを計算します)、「fitness_parameter」は最小化する必要がある値です (次元 [反復] を持ちます)。

今、明らかに、私は自分の LMA を書くことができましたが、それは少し車輪を再発明することです - 私のニーズを満たす何かがあるかどうか (または scipy LMA をこのように使用できるかどうか) を考えていました。

開始点は最小値の近くにある必要があるため、Gauss-Newton アルゴリズムも機能するはずです。フィットを制限する機能 (つまり、フィットしたパラメーターの最大値と最小値を設定する) は便利ですが、必須ではありません。

4

2 に答える 2

3

Jscipy.optimize.leastsq 関数を使用すると、特定のパラメーター ベクトルのヤコビアンを評価する関数を提供できます。function をシリアルに呼び出して scipy.optimize.leastsq を近似させる代わりに、この行列を計算するためのマルチプロセッシング ソリューションを実装できますf

残念ながら、scipy の LMA 実装では、 と に別々の関数を使用しfますJ。同じパラメータベクトルで呼び出された場合fに再利用するために、計算した情報をキャッシュしたい場合があります。または、単一の呼び出しJを使用する独自の LMA バージョンを実装できます。fJ

于 2012-06-24T19:46:53.677 に答える
0

これは基本的に繰り返される質問であることがわかりました - 以下のリンクで回答を求められています。

scipy.optimize.leastsq の目的関数へのマルチスレッド呼び出し

于 2012-06-24T18:51:21.690 に答える