複雑な問題に対して多目的粒子群最適化アルゴリズムを使用しています。これは大きな母集団 (4000 個の粒子) を使用し、シミュレーションに時間がかかります (4 ~ 6 時間の実行)。
アルゴリズムは、これまでに見つかった最良のソリューションのリポジトリであるアーカイブを保持しているため、アルゴリズムの収束と動作を分析するために、このリポジトリからデータを保存する必要があり、場合によっては反復ごとに母集団全体からデータを保存する必要があります。
現在、各イテレーションで、(Java で言えば) パーティクルのオブジェクトから (リポジトリおよび/または集団から) いくつかの属性をコピーし、シミュレーションとは別のスレッドで実行されるメソッドで StringBuffer にフォーマットします。プログラムの実行が終了したら、テキスト ファイルに保存します。
これを行うことで、私のアルゴリズムはメモリを悪い方法で消費していると思います。しかし、パフォーマンスについても考えると、これらすべてのデータを保存する最善の方法がわかりません。同じロジックに従う必要がありますが、アルゴリズムの最後まで行うのではなく、反復ごとに .txt ファイルを保存する必要がありますか? または、データベースに保存する必要がありますか? もしそうなら、私はそれを各反復で、または最後または別の時に保存する必要がありますか? それとも、どういうわけか別の方法でアプローチする必要がありますか?
編集:リポジトリ データは多くの場合 [5 - 10] MB の範囲ですが、人口データは [100 - 200] MB のメモリを占有します。プログラムを実行するたびに、平均収束を分析するために約 20 回のシミュレーションが必要です。