C 实现一个基本的捕食者-食饵模拟
我试图实现捕食者-猎物模拟,但遇到了一个问题。 捕食者搜索附近的猎物并吃掉它。如果附近没有猎物,它们会移动到一个随机的空细胞。C 实现一个基本的捕食者-食饵模拟,c,algorithm,simulation,C,Algorithm,Simulation,我试图实现捕食者-猎物模拟,但遇到了一个问题。 捕食者搜索附近的猎物并吃掉它。如果附近没有猎物,它们会移动到一个随机的空细胞。 基本上,我遇到的问题是当我进入“一代人”的时候 假设我有一个3x3的网格,每个单元格的编号从0到8。 如果我在0和1中有2个捕食者,第一个捕食者0被选中,它移动到3号或4号单元格 例如,如果它进入细胞3,那么它会继续检查捕食者1。这似乎是正确的 但它有点“优先”于指数较低的生物。。我试过使用2个数组,但这似乎也不起作用,因为它会检查生物存在但不存在的地方 任何人都知道如
基本上,我遇到的问题是当我进入“一代人”的时候 假设我有一个3x3的网格,每个单元格的编号从0到8。
如果我在0和1中有2个捕食者,第一个捕食者0被选中,它移动到3号或4号单元格
例如,如果它进入细胞3,那么它会继续检查捕食者1。这似乎是正确的 但它有点“优先”于指数较低的生物。。我试过使用2个数组,但这似乎也不起作用,因为它会检查生物存在但不存在的地方
任何人都知道如何“公平”和“正确”地做到这一点吗?如果你的猎物非常密集,这是一个常见的问题,我怀疑你没有长寿的“种群”。也可以作为评论,随机更新你的捕食者。也就是说,你不需要一步一步地搜索你的位置,而是把你的捕食者名单随机化,然后一个接一个地更新它们。我认为这是必要的,但我不知道这是否足够。某种循环法怎么样。将你的捕食者放在一个循环链表中,并保留一个指向当前“第一个”节点的指针。然后,每一代将第一个指针前进到列表中的下一个位置。您可以轻松地在循环列表的前面或后面插入新的捕食者。我最近在Java中做了一个类似的任务。从最上面一行到最下面处理捕食者不仅给较低的指数带来“不公平的优势”,而且还创造了猎物和捕食者的移动模式 我通过随机选择行和列来克服这个问题。这样,每一个捕食者/猎物在一代的早期阶段都有相同的机会被加工
一种随机化的方法是创建一个
(行、列)
对的链表。然后洗牌链表。在每一代中,选择一个随机索引开始并继续处理。此问题通过一种称为双缓冲的技术解决,该技术也用于计算机图形学(以防止当前绘制的图像干扰当前显示在屏幕上的图像)。使用两个数组。第一个数组保存当前状态,您可以根据第一个数组做出有关移动的所有决定,但您可以在另一个数组中执行移动。然后,你交换他们的角色
编辑:看来我对你的问题读得不够透彻。双缓冲和随机化可能都是必需的,这取决于规则的复杂程度(但如果除了您描述的规则之外没有其他规则,随机化就足够了)。不过,它们解决了两个截然不同的问题:
- 当你有规则时,双缓冲解决了正确性问题,其中关于细胞中生物将发生什么的决定取决于相邻细胞的内容,而关于相邻细胞的决定也取决于该细胞。例如,如果你有一条规则说,如果两个捕食者相邻,它们都会彼此远离,那么你需要双重缓冲。否则,在移动第一个捕食者后,第二个捕食者将看不到任何相邻的捕食者,并将保持在原地
- 随机化解决了资源有限时的公平性问题,比如一个猎物只能被一个捕食者吃掉(这似乎是你关心的问题)