私は、捕食者、被食者、および食物 (状況に応じて地形に成長する植物と、クリーチャーが死ぬときに放つ肉) の進化シミュレーションに取り組んでいます。それぞれが (x,y) の位置を占めます。
現時点では、各クリーチャーには赤、緑、青のカラー チャンネルを感知するいくつかの「目」があり、クリーチャーまたは食べ物が視認距離内にある場合、目は反応してニューラル ネットワークに入力を送信します。彼らが見ているオブジェクトの色に応じて、それは相対的な角度であり、クリーチャーからの距離です.
私が今行っていることは、すべての植物、肉片、生き物を反復処理し、それらが生き物の視距離内にあるかどうかを確認することです. その条件が真の場合、ネットワークの入力が計算されます。
問題は、通常 150 から 300 "ユニット" の間であるクリーチャーの表示距離と比較して、世界が巨大 (約 10,000*10,000 "ユニット") であることです。その上、植物の数は、他のすべての生き物や肉片と一緒に、地形の状態に応じて非常に高くなる可能性があります (最大で数千にもなります)。
そのため、通常、各クリーチャーに対して大規模なループが実行され、シミュレーションが非常に遅くなります。これは、チェックされたクリーチャーと食べ物のほとんどが完全に無関係である (離れすぎている) 場合です。
私が求めているのは、各ループで距離をチェックするポイントの数を減らしたり、チェックするポイントの距離を制限したり、その他の技術を使用したりする方法またはアルゴリズムです。
PS: シミュレーションをさまざまな「ゾーン」に分割することを考えたので、クリーチャーがゾーンにいる場合、その特定のゾーンの他のポイント (食べ物や他のクリーチャー) のみをチェックします。しかし、彼らは絶え間なく移動しているため、ゾーンの端にいると視界が非常に不正確になります。また、distance^2 をチェックして (sqrt を実行しない)、viewing_distance^2 より小さい場合にのみ計算することで、速度をわずかに改善しました。