0

複雑な問題に対して多目的粒子群最適化アルゴリズムを使用しています。これは大きな母集団 (4000 個の粒子) を使用し、シミュレーションに時間がかかります (4 ~ 6 時間の実行)。

アルゴリズムは、これまでに見つかった最良のソリューションのリポジトリであるアーカイブを保持しているため、アルゴリズムの収束と動作を分析するために、このリポジトリからデータを保存する必要があり、場合によっては反復ごとに母集団全体からデータを保存する必要があります。

現在、各イテレーションで、(Java で言えば) パーティクルのオブジェクトから (リポジトリおよび/または集団から) いくつかの属性をコピーし、シミュレーションとは別のスレッドで実行されるメソッドで StringBuffer にフォーマットします。プログラムの実行が終了したら、テキスト ファイルに保存します。

これを行うことで、私のアルゴリズムはメモリを悪い方法で消費していると思います。しかし、パフォーマンスについても考えると、これらすべてのデータを保存する最善の方法がわかりません。同じロジックに従う必要がありますが、アルゴリズムの最後まで行うのではなく、反復ごとに .txt ファイルを保存する必要がありますか? または、データベースに保存する必要がありますか? もしそうなら、私はそれを各反復で、または最後または別の時に保存する必要がありますか? それとも、どういうわけか別の方法でアプローチする必要がありますか?

編集:リポジトリ データは多くの場合 [5 - 10] MB の範囲ですが、人口データは [100 - 200] MB のメモリを占有します。プログラムを実行するたびに、平均収束を分析するために約 20 回のシミュレーションが必要です。

4

1 に答える 1

1

StringBuffer配列を使用して文字を保持します。これはメモリの連続領域です。拡張する必要があるときはいつでも、2 倍の大きさの新しい配列を作成します。通常、ほとんどのアプリケーションではこれで十分ですが、このバッファーが非常に大きくなる可能性があり、メモリの連続部分を管理するオーバーヘッドを排除したい場合は、文字列 (または StringBuffer) のリストに置き換えることができます。これにはより多くのメモリが必要になりますが、このメモリが連続している必要はありません。

于 2012-12-17T21:52:20.733 に答える