5

私は捕食者-被食者のモデルを実装しようとしています。これはエージェントベースモデルです。数ミリ秒ごとに新しい動きがあります。フィールドには、捕食者と獲物の2種類の生き物がいます。それらのそれぞれの動作は、次のルールによって与えられます。

獲物:

  1. 空いているセルに移動しました
  2. いくつかのステップごとに、彼の古い細胞の子孫が生まれます
  3. 平均余命は移動回数によって制限されます

プレデター:

  1. 捕食者は獲物と一緒に細胞に移動します。そのようなセルがない場合は、任意の隣接セルで
  2. 同じ
  3. 同じ

獲物の移動の選択に問題があります。 獲物

たとえば、セル5と9に獲物がいます。それぞれがセル6に移動できます。この競合を解決するにはどうすればよいですか?ありがとう

4

5 に答える 5

4

非同期更新を使用します。獲物をランダムな順序で繰り返し、移動するセルを順番に決定してもらいます。

これは、シミュレーションで一般的なアプローチです。ダイナミクスのリミットサイクルを排除するという追加の利点があります。

于 2012-01-20T11:11:09.427 に答える
0

「移動」にはどのくらい時間がかかりますか?1つ移動すると、獲物が移動した後、次の1つを移動しますが、競合は発生しません。獲物は単にスペースがすでに占有されているのを見て、他の場所に移動します。

移動に時間がかかる場合は、獲物がお互いを監視し、他の獲物がどこかに移動しようとしているかどうかを確認すると言うかもしれません(人々が交通中の車を見ているように)。次に、5からの獲物がそこに移動しようとしているときに、ターゲットフィールドのステータスを「5用に予約済み」に変更します。次に、9からの獲物はこれを見て、5と衝突するか(興味があるかもしれません:P)、5を避けるかを決定できます。

于 2012-01-20T09:39:37.417 に答える
0

ゲームロジックに依存します。獲物が同じセルにいる可能性がある場合は、獲物の数を示すインジケーターを使用するだけです。現在のフィールド状態を表すために2D配列を使用している場合は、次のようなコードを使用できます。

-1 - predator
n - preys

n> = 0、(n = 0-セルは空、n = 1セルには1つの獲物が含まれるなど)。

それ以外の場合(獲物が同じセルに表示されない場合)、ターン制ストラテジーを使用します。すべての獲物を配列に保存するか、各獲物に番号を付けます。その場合、獲物の動きは単純なループ(擬似コード)で表されます。

for each prey in preys
    move(prey)
end

ここで、移動ロジックは、獲物がどのように移動するかをアルゴリズムで記述します。

于 2012-01-20T09:40:26.217 に答える
0

2つのステップとして移動するか、1つのステップとして移動するかなどに応じて、かなりの数の方法があります。

  1. 各獲物の意図された動きを追跡し、他の獲物がそれらを占有するのを防ぎます。
  2. 別の獲物がすでに目的地を占領しているかどうかを確認し、占領している場合は何もしません。
  3. 両方が同じ場所を占領しようとする場合は、獲物の1つをランダムに削除します。
  4. 移動先が占有されている場合は、移動オプションを再評価します。

それを行うための「正しい」方法は実際にはありません。

于 2012-01-20T09:40:58.463 に答える
0

この関連する質問と私の答えを参照してください。優れた衝突検出メカニズムについて説明します。

衝突検出のためにO(n ^ 2)の複雑さを回避する

于 2012-01-20T09:59:01.067 に答える