8

私は python を初めて使用し、遺伝的アルゴリズム (GA) を使用してある種の曲線近似を行い始めました。その GA には、マルチプロセッシングを使用することで計算時間を大幅に短縮できる(素晴らしい) pyevolve ライブラリ ( http://pyevolve.sourceforge.net/ ) を使用しています。

ここで問題が発生します。近似したい曲線は、Excel ファイルから読み取られ、プログラムの最初にグローバル変数として格納される配列です。python マルチプロセッシング モジュールを使用すると、すべてのプロセスが独自のグローバル変数を使用して独自の python インスタンスを作成します。これにより、アルゴリズムのすべての世代 (すべてのプロセスを意味します) のすべての個人が、Excel ファイルを何度も開いて読み取るようになります。大きな Excel ファイルを開くと膨大な時間がかかる可能性があるため、そのファイルを 1 回開くだけで、すべてのプロセス/個人が読み取り配列を利用できるようにするとよいでしょう。

マルチプロセッシングはpyevolveライブラリで開始されますが、更新を簡単にするために変更したくありません。残念ながら、これは、変数をプロセスプールに渡すだけであることを意味します。

p = Process(target=my_func,args=(my_array))

私にとってはオプションではありません。これは私がこれまでに見つけた唯一の解決策です。

すべてのプロセスから my_array にアクセスできるようにする別の方法を知っている人はいますか?

4

2 に答える 2

1

他の誰かが直面している場合、この問題をどのように解決したかをお知らせしたかっただけです。

私の解決策は、一般的な python 関連の問題には適用されませんが、pyevolve を使用する場合に役立ちます。私の場合はこれで十分でした。私が知らなかったのは、pyevolve では、以下を介してゲノムまたは遺伝的アルゴリズム インスタンスにパラメーターを追加できるということでした。

my_genome.setParams(xyz=my_array) また my_ga.setParams(xyz=my_array)

これらのパラメータには、次の方法でアクセスできます。

my_genome.getParam('xyz')my_ga.getParam('xyz')

これらのパラメーターはすべてのプロセスからアクセスできるため、問題は解決され、Python の一般的なマルチプロセッシングの問題について考える必要はありませんでした。これが他の誰かに役立つことを願っています!

于 2016-07-12T10:27:07.847 に答える