捕食者 - 猎物模拟

时间:2012-01-20 09:21:59

标签: algorithm collision-detection simulation agent agent-based-modeling

我正在尝试实施捕食者 - 猎物的模型。 它是基于代理的模型。每隔几毫秒就是一个新举措。在场上有两种类型的生物:捕食者和猎物。每个人的行为由以下规则给出:

食饵:

  1. 刚搬到空置的牢房
  2. 每一步都会为他的旧牢房创造后代
  3. 预期寿命受行动次数的限制
  4. 捕食者:

    1. 捕食者带着猎物移动到牢房。如果不是这样的细胞 免费的邻近单元
    2. 相同的
    3. 相同的
    4. 我有选择猎物移动的问题。 Prey

      例如,我在单元格5和9中有猎物。 它们中的每一个都可以移动到单元格6。 我该如何解决这个冲突? 感谢

5 个答案:

答案 0 :(得分:4)

使用异步更新。以随机顺序迭代猎物,让他们轮流决定他们应该移动哪个细胞。

这是模拟中的常用方法。它具有额外的好处,因为它消除了动态中的极限循环。

答案 1 :(得分:0)

'移动'需要多长时间?如果你移动一个,那么在猎物移动后,你移动下一个,没有冲突。猎物只会看到空间已被占用并移动到其他地方。

如果移动需要时间你可能会说猎物会密切注视彼此,看看是否有其他猎物试图移动到某个地方(就像人们在交通中看车)。然后,当5的猎物试图移动到那里时,您将目标字段的状态更改为“保留为5”。然后从9的猎物可以看到这个,并决定他们是否想要与5碰撞(可能是有趣的:P)或避免5。

答案 2 :(得分:0)

取决于游戏逻辑。如果猎物可以在同一个细胞上,那么只需使用显示猎物计数的指示器。如果您使用2D数组表示当前字段状态,则可以使用以下代码:

-1 - predator
n - preys

n> = 0,(n = 0 - 单元格为空,n = 1单元格包含1个猎物,依此类推。)

否则(如果猎物不能出现在同一个细胞上)使用回合制策略。将所有猎物保存在阵列中或给每个猎物分配编号。在那种情况下,猎物的移动代表简单的循环(伪代码):

for each prey in preys
    move(prey)
end

其中移动逻辑描述了猎物如何移动的算法。

答案 3 :(得分:0)

有很多方法,取决于你是否决定&两步或一步等等:

  1. 跟踪每个猎物的预定动作,并防止其他猎物占据它们。
  2. 检查另一个猎物是否已占据目的地,如果是,则不执行任何操作。
  3. 如果它们都试图占据相同的位置,则随机删除其中一个猎物。
  4. 如果目的地已被占用,请重新评估移动选项。
  5. 实际上没有'正确'的方法。

答案 4 :(得分:0)

请参阅此相关问题和我的回答。 它描述了一种良好的碰撞检测机制。

Avoid O(n^2) complexity for collision detection