我正在尝试实现捕食者 - 猎物模型。它是基于代理的模型。每隔几毫秒就是一个新动作。在球场上有两种类型的生物:捕食者和猎物。他们每个人的行为由以下规则给出:
猎物:
- 刚搬到一个无人居住的牢房
- 每走几步就会为他的旧牢房创造后代
- 预期寿命受移动次数的限制
捕食者:
- 捕食者带着猎物移动到牢房。如果没有这样的单元格,则在任何空闲的相邻单元格中
- 相同的
- 相同的
我对猎物移动的选择有疑问。
例如,我在 5 号和 9 号牢房有猎物。它们每个都可以移动到 6 号牢房。我该如何解决这个冲突?谢谢
我正在尝试实现捕食者 - 猎物模型。它是基于代理的模型。每隔几毫秒就是一个新动作。在球场上有两种类型的生物:捕食者和猎物。他们每个人的行为由以下规则给出:
猎物:
捕食者:
我对猎物移动的选择有疑问。
例如,我在 5 号和 9 号牢房有猎物。它们每个都可以移动到 6 号牢房。我该如何解决这个冲突?谢谢
使用异步更新。以随机顺序遍历猎物,让它们依次决定应该移动到哪个单元格。
这是模拟中常用的方法。它还有一个额外的好处是它消除了动力学中的极限循环。
请参阅此相关问题和我的答案。它描述了一种良好的碰撞检测机制。
“搬家”需要多长时间?如果你移动一个,那么在猎物移动之后,你移动下一个,没有冲突。猎物只会看到空间已经被占用并移动到其他地方。
如果移动需要时间,你可能会说猎物互相监视,看看是否有其他猎物试图移动到某个地方(就像人们观察交通中的汽车)。然后,当来自 5 的猎物试图移动到那里时,您可以将目标字段的状态更改为“为 5 保留”。然后来自 9 的猎物可以看到这一点并决定是否要与 5 碰撞(可能很有趣:P)或避免 5。
取决于游戏逻辑。如果猎物可以在同一个单元格上,那么只需使用显示猎物数量的指示器。如果您使用 2D 数组来表示当前字段状态,则可以使用以下代码:
-1 - predator
n - preys
n >= 0,(n = 0 - 单元格为空,n = 1 单元格包含 1 个猎物,依此类推)。
否则(如果猎物不能出现在同一个单元格上)使用回合制策略。将所有猎物保存在数组中或给每个猎物编号。在这种情况下,猎物的移动由简单的循环(伪代码)表示:
for each prey in preys
move(prey)
end
其中移动逻辑描述了你的猎物如何移动的算法。
相当多的方法,取决于你是决定和移动两步还是一步,等等:
没有真正的“正确”方法来做到这一点。