【问题标题】:NetLogo continue search under specific criteriaNetLogo 在特定条件下继续搜索
【发布时间】:2014-08-01 20:09:36
【问题描述】:

我正在模拟雌性动物从它们母亲的领地中分散出来寻找自己的领地。本质上,他们需要找到未被其他女性领地占据的区域。补丁有一个变量owner-fem,用于标识它属于哪个女性。理想情况下,我想要女性:

  1. 移动到补丁,

  2. 在该补丁周围的某个半径范围内搜索任何其他领土,如果在该半径范围内有另一个女性的领土

  3. 移动到另一个补丁以重新开始搜索过程。以下是我到目前为止的内容,但我认为我没有正确使用in-radius

我不确定最好的方法是告诉雌性继续搜索直到满足条件。任何帮助将非常感激。

to female-disperse
  move-to one-of patches with [owner-fem = nobody]
  if [owner-fem] of patches in-radius 3 != nobody
    [
      move-to one-of patches with [owner-fem = nobody]
    ]
end

【问题讨论】:

    标签: netlogo


    【解决方案1】:

    如果你想“一次性”完成,你可以让他们直接移动到合适的补丁:

    to female-disperse
      move-to one-of patches with [
        not any? patches in-radius 3 with [owner-fem != nobody]
      ]
    end
    

    请注意,patches in-radius 包括海龟所在的补丁,因此不需要单独的 move-to one-of patches with [owner-fem = nobody]

    我不知道你的模型需要什么,但如果我是你,我可能会尝试让它们逐渐分散一点。这是您可以从 go 过程(或任何其他“永远”运行的过程)调用的另一个版本:

    to female-disperse
      ask females with [owner-fem != self ] [
        move-to one-of neighbors ; or however you want them to move
        if not any? patches in-radius 3 with [owner-fem != nobody] [
          set owner-fem self
        ]
      ]
    end
    

    在此版本中,所有不在其拥有者所在的补丁上的雌性都会移动到相邻的补丁之一。然后他们检查该新补丁是否合适。如果是,他们将成为它的所有者。如果不是,他们现在就停在那里:他们将在go 的下一次迭代中继续搜索。您不必完全这样做;它可能只是沿着这些路线松散的东西。

    【讨论】:

    • 这正是我所需要的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多