正しいルートをたどっているかどうかわからないので、スレッド管理の使用と、できればタスク並列ライブラリーの使用についてアドバイスを得たいと思っています。おそらく最善の方法は、私がやろうとしていることの概要を説明することです。
問題が与えられた場合、ヒューリスティック ベースのアルゴリズムを使用してソリューションを生成する必要があります。基本的なソリューションを計算することから始めます。この操作は並列化できないと思うので、心配する必要はありません。
初期ソリューションが生成されたら、n 個のスレッドをトリガーして、より良いソリューションを見つけようとします。これらのスレッドは、いくつかのことを行う必要があります。
- それらは、別の「最適化メトリック」で初期化する必要があります。言い換えれば、コード内に設定された優先レベルで、さまざまなものを最適化しようとしています。これは、それらがすべてわずかに異なる計算エンジンを実行することを意味します。TPLでこれができるかどうかはわかりません..
- スレッドの 1 つが、現在最もよく知られている解決策 (すべてのスレッドで共有する必要がある) よりも優れた解決策を見つけた場合、最適な解決策を更新し、他の多くのスレッドを強制的に再起動する必要があります (これも優先レベルによって異なります)。最適化指標の)。
- スレッド間で特定の計算を組み合わせたい場合もあります (たとえば、問題への特定のアプローチの確率の結合を維持します)。ただし、これはおそらくよりオプションです。
- システム全体は明らかにスレッドセーフである必要があり、可能な限り高速に実行したいと考えています。
自分のスレッドを管理してシャットダウンするなど、かなりの実装を試みましたが、かなり複雑になり始め、TPL の方が優れているのではないかと考えています。誰かが一般的なガイダンスを提供できるかどうか疑問に思っていますか?
ありがとう...