实现基本捕食者 - 食饵模拟

时间:2011-03-06 01:56:25

标签: c algorithm simulation

我正在尝试实现捕食者 - 猎物模拟,但我遇到了一个问题。 捕食者搜寻附近的猎物并吃掉它。如果附近没有猎物,它们会移动到一个随机空置的细胞中 基本上我遇到麻烦的部分是当我推进“一代”时 假设我有一个3x3的网格,每个单元格的编号从0到8 如果我在0和1中有2个捕食者,则检查第一个捕食者0,它移动到细胞3或4 例如,如果它进入单元格3,那么它继续检查捕食者1.这似乎是正确的 但它对指数值较低的生物有“优先考虑”。我尝试使用2个阵列,但这似乎不起作用,因为它会检查有机体但不是有生命的地方。 ._。
任何人都知道如何“公平地”和“正确地”做到这一点?

4 个答案:

答案 0 :(得分:2)

如果你的猎物如此密集以至于这是一个常见的问题,我怀疑你没有一个可以长寿的“人口”。同时作为评论随机更新你的捕食者。也就是说,不是逐步遍历你的位置数组,而是将你的捕食者列表随机化,然后逐个更新它们。我认为是必要的,但我不知道它是否足够。

答案 1 :(得分:2)

我最近在Java中做了类似的任务。处理从顶行到底部的捕食者不仅给予较低指数“不公平的优势”,而且还在捕食者和捕食者的运动中创造了模式。

我通过以随机顺序方式选择行和列来克服这个问题。这样,每一只捕食者/猎物都有同样的机会在一代人的早期阶段被处理。

随机化的方法是创建(row,column)对的链接列表。然后随机播放链表。在每一代中,选择一个随机索引来开始并继续处理。

答案 2 :(得分:1)

使用称为双缓冲的技术解决了这个问题,该技术也用于计算机图形学(为了防止当前正在绘制的图像干扰当前正在屏幕上显示的图像)。使用两个数组。第一个保存当前状态,并根据第一个数组做出关于移动的所有决定,但是在另一个数组中执行运动。然后,你交换他们的角色。

编辑:看起来我没有彻底阅读你的问题。可能需要双缓冲和随机化,这取决于您的规则有多复杂(但如果除了您描述的规则之外没有其他规则,则随机化就足够了)。但他们解决了两个截然不同的问题:

  • 双重缓冲解决了正确性的问题,当你有规则时,关于单元格中生物会发生什么的决定取决于相邻单元格的内容,并且关于相邻单元格的决定也依赖于这个细胞。如果你是有一条规则说,如果两个捕食者相邻,它们两个彼此远离,你需要双缓冲。否则,在您移动第一个捕食者后,第二个捕食者将看不到任何相邻的捕食者,并将保留在原位。
  • 当资源有限时,随机化解决了公平的问题,例如当猎物只能被一个捕食者吃掉时(这似乎是与你有关的问题)。

答案 3 :(得分:0)

某种循环方法怎么样?将捕食者放在循环链表中并保留指向当前“第一”的节点的指针。然后,将第一个指针推进到每一代列表中的下一个位置。您可以轻松地在循环列表的前面或后面插入新的捕食者。