質問

しばらく前に、私はセルラーオートマトンのようなWA-TORを書きました(ウィキペディアを参照してください)しかし、さらにいくつかの種と少し賢い種があります。安定したシステムを取得するための多くの微調整を除いて、それは非常に簡単でうまく機能しました。しかし、それ以来、私は自分自身(そして今あなたが)を「現実的に」更新する方法を自問しています。

私の「世界」はグリッドであり、常に左から右下に更新されました。また、上部と左に近いセルが常に高速であることを意味します。したがって、細胞内の魚[3、3]は、更新される前に[3、2]のサメに食べることができます。細胞が反対の位置を持つ場合、魚は更新される前にサメから離れることができるため、魚は常にサメから逃げます。

これが「問題」(または少なくとも非現実的)であることは正しいですか?

現実的な設定では、すべてのセルを同時に更新する必要がありますが、そのようなものを実装する方法がわかりません。私が想像できるもう1つの方法は、「シャッフル」順序でセルを評価することです。

この問題をどのように解決しますか /そのような問題は通常どのように解決されますか?

役に立ちましたか?

解決

@rogachが言及しているように、同時の更新は機能しません。あなたの細胞オートマトンは非決定論的であるため、2匹の魚はお互いの次の位置を知らず、衝突する可能性があります。

あなたの細胞オートマトンが非決定的であることを考えると、最良の解決策は、グリッドを非決定的な方法で更新することだと思います。無作為に。ランダムセルを選択して更新します。どちらかをランダムに選択し、更新したものを追跡するため、各セルはティックごとに正確に1回更新されるか、ランダムにセルを選択し、追跡することを気にしません。 2番目のアプローチは簡単になりますが、更新されるセルのリスクがあります 少し より頻繁に。平均して、均等に分布したランダム関数がある場合、すべてのセルが同じ量で更新されます。

他のヒント

現実的な設定では、すべてのセルを同時に更新する必要がありますが、そのようなものを実装する方法がわかりません。

これは私が提案するアプローチです。 2つのグリッド、「古い」1つと「新しい/現在」のグリッドがあります。次世代を計算するときは、計算を古いグリッドに基づいて、結果を新しいグリッドに書き込みます。次に、新しいグリッドを表示します。新しいグリッドが「古い」グリッドになり、古いグリッドが新しいグリッドになるように、ポインターを交換するようになりました。繰り返す。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top