私は、すべてのループを更新する何千もの潜在的な何百万ものオブジェクトを処理できる必要があるシミュレーションに取り組んでいます。すべてのオブジェクトには、(AI)と呼ばれる論理関数が必要です。ただし、オブジェクトの場所に応じて、ロジックの詳細度が決まります。例えば:
[100個のオブジェクトを操作してシンプルに保つ]
- すべてのオブジェクトには場所(x、y)があります
20
オブジェクトは、「関心のあるポイント」の場所から500ポイント離れています。50
オブジェクトは、オブジェクトから500ポイント離れてい20
ます(1000ポイント離れています)。30
オブジェクトは、対象のポイントから100ポイント以内にあります。
これは、オブジェクトが仮想市民である詳細な都市シミュレーションであるとしましょう。午後6時に、全員が仕事から家に帰って寝る時間です。
ですから、私たちはすべての市民を繰り返しますが、私は彼らに異なることをしてもらいたいと思っています。
- 最も遠い物体(50)仕事から家に帰り、朝まで眠ります。
- 近くの物(20)仕事から家に帰り、一口食べてから朝まで寝ます。
- 最も近い物(30)仕事から家に帰り、一口食べて、歯を磨き、朝まで寝ます。
ご覧のとおり、関心のあるポイントに近づくほど、ロジックはより詳細になります。
私は、すべてのオブジェクトを反復処理するための最良かつ最もパフォーマンス効率の高い方法を見つけようとしています。これは、オブジェクトでいっぱいの手で比較的簡単ですが、少なくとも500,000個のオブジェクトを効率的に処理する必要があるため、アドバイスが必要です。
また、ループごとにすべてのオブジェクトを反復処理する必要があるのか、ループごとに最も近いオブジェクトを反復処理する方がよいのか、10ループごとに遠くのオブジェクトを反復処理する方がよいのかわかりません。
オブジェクトが近くにある他のオブジェクト間で相互作用する必要があるという追加の要件があるため、これを行うための最善の方法は、オブジェクトを四分木に整理することかもしれないと考えていましたが、よくわかりません。四分木は静的コンテンツ用のようですが、前述のように、私が扱っているオブジェクトには場所があり、他の場所に移動する必要があります。私は正しい思考の道を進んでいますか?または「より良い」方法はありますか?
誰かがそれに関連すると思うなら、私もc++で働いています。
アドバイスをいただければ幸いです。
ノート:
- 興味のあるポイントは定期的に変化します。それをカメラビューと考えてください。
- オブジェクトは動的に作成および破棄されます