私は単純な進化的アルゴリズムに取り組んでいます。
使い方:
すべてのセルが空白、植物、草食動物のいずれかであるグリッド マップがあります。植物と草食動物は生き物なので (植物はそうではありません)、どちらもエネルギーと色を持っています。クリーチャーは数ミリ秒ごとに処理を行います (タイマーが起動したとき)。植物は絶えずエネルギーを充電しますが、草食動物はエネルギーを失います。植物が完全に再充電されると、ランダムな方向 (北、南、東、または西) を見て、その方向の隣接セルが空白の場合、植物はそのセルに繁殖します。草食動物は植物を食べることでエネルギーを回復します。草食動物が何かをする番になると、ランダムに隣接するセルを調べます。空の場合、草食動物はそこに移動します。それが植物であれば、草食動物はそれを食べてそこに移動しようとします。草食動物の色が植物の色に近いほど、草食動物が成功する可能性が高くなります。草食動物はエネルギーが 0 になると死亡します。草食動物が最大エネルギーに達すると、繁殖も行います。子孫は常に親とはわずかに異なる色をしています。
ここに写真があります:
これは、内部から食べられている多くの植物です。
しばらくすると、システムは正常化します。
大きな斑点が消え、いつでもいくつかの色が現れます。もちろん、これは想定内です。
だから、私は今働くプログラムを持っています。しかし、シングルスレッドで実行されているので、マルチスレッド化したいと考えています。マップ上のすべてのセルにスレッドを作成するところまで行く予定です。
やり過ぎなのはわかっているけど、とにかくやりたい。そうすれば、これらの小さなアトミックピースである細胞を手に入れることができ、それらはすべて非同期で動作し、まるでパズルのピースを組み立てるかのように、その場で相互に接続することができます.
それが基本的な考え方です。細胞をできるだけ自律的にしたい。私はこれを実装しようとしました:私はすべてのセルにスイングタイマーを作成し、タイマーが起動すると、セルが動作するスレッドを開始しました。複数のネイバーが同じセルにアクセスしようとします。これの問題は、セルが何かをしようとするたびに新しいスレッドが呼び出されることです。これは非常にリソースを消費することを知っているので(直接の経験)、どうにかしてすべてのセルに対して永続的なスレッドを作成したいと考えています。各スレッドは、独自のセルのタイマー、アクション リスナーを処理し、タイマーが起動したときにそのセルのアクションを実行します。これらのスレッドは、基本的に停止することはありません。このようなシステムを実装する方法がわからないので、これについて助けが必要です。
編集:質問を明確にする:タイマーイベントをリッスンし、タイマーが起動したときに何かを実行するスレッドの例が必要です。これはすべてスレッド内で発生するはずです。