4

私は、画像を表すGPを生成しようとする遺伝的プログラミングプロジェクトに取り組んでいます。私のアプローチは、画像を異なる独立したセクションに分割し、別々のスレッドにそれらの進化の仕事をさせることです。

物事は非同期になるので、当然、オブジェクトも独立している必要があります。問題は、JGAPの特定のオブジェクトが実際には共有変数であるため、スレッド間で共有されることに気づいたことです。これにより、多くの問題が発生します。たとえば、同じ名前のすべての変数が同じであることに気付きました。つまり、複数のIGPProgramを同時に評価する場合は、変数をロックする必要があり、パフォーマンスが大幅に低下する可能性があります。

また、複数のGPConfigurationを作成しようとすると、プログラムは最初にそれをリセットする必要があると文句を言うことに気づきました。したがって、これはすべてのGPConfigurationが共有されているように見えます(つまり、複数のスレッドで同時に複数の構成を作成することはできません)。これは、GPProblemsの作成に時間がかかる可能性があり、多くのGPProblemsを作成しているため問題です。なので、作業を複数のスレッドに分割することで、時間を短縮したいと思っていました。

JGAPとスレッドを操作するときに知っておく必要のある「落とし穴」はありますか?残念ながら、マルチスレッドはJGAPのドキュメントではあまり触れられておらず、JGAPの経験があるかもしれない人々からアドバイスをもらいたいと思っていました。

4

2 に答える 2

3

FAQによると、JGAP は「マルチスレッド計算をサポートしています」。ただし、これは、API/オブジェクト グラフ全体が完全にスレッド セーフであることを意味するものではありません。発生している問題を示すコード サンプルはありますか? 質問を少し洗練しないと、標準的な答えが得られるとは思いません。

の下の JGAPディストリビューションzipにスレッド化された例がありexamples/src/examples/simpleBooleanThreadedます。

于 2012-12-10T15:55:47.930 に答える