【问题标题】:NetLogo: how to let turtles return after one tickNetLogo:如何让海龟在一次滴答后返回
【发布时间】:2021-01-17 14:30:24
【问题描述】:

希望你能帮帮我!我对以下代码有一个 NetLogo 问题:

breed [tourists tourist]

turtles-own [satisfaction]

to setup
  clear-all
  reset-ticks
end 

to go
  
  tick
  
  ask n-of initial-number-tourists patches
  [
    sprout 1 [
      set color white
      set size 1
    ]
  ]

  ask turtles
  [ let nearest min-one-of turtles [distance myself]
  if-else distance nearest < 0.0000001 [ set satisfaction 0 ]
    [ set satisfaction 1 ] 
  ]

  ask turtles with [satisfaction = 0] [die]

end

目的是在每个滴答开始时产生“初始数字游客”。然后,他们根据是否有海龟靠近来计算他们的“满意度”,让满意度为 0 的海龟死亡。然后,剩下的(满意的)乌龟会再次发芽,并重新计算它们的满意程度。

但是,代码正在运行,但出现了意想不到的结果。发生的事情是海龟都发芽了,而且它们都死了。下一个刻度;它们再次发芽,又全部死亡。即使我像在我提供的代码中那样将距离阈值设置得非常低。

希望你能帮帮我!!亲切的问候

【问题讨论】:

    标签: netlogo agent-based-modeling


    【解决方案1】:

    你遇到的问题是离每只乌龟最近的乌龟就是它自己!因此,到nearest 的距离始终为零,并且每只海龟的满意度都将设置为零。你要的是other海龟中最接近的,

    let nearest min-one-of other turtles [distance myself]
    

    (您的距离阈值意味着所有海龟的 satisfaction 为 1,但我认为这是您在测试中想要完成的。由于海龟在斑块的中心发芽,因此阈值为 @987654325 @ 会完成同样的事情。)

    次要点:惯例是将tick 放在末尾,而不是go 过程的开头。

    【讨论】:

    • 非常感谢!这很有意义,现在效果更好!唯一的事情是,我想在下一个滴答声中发芽在上一个滴答声中“满意”的海龟。我现在这样做的方式是将满意的海龟添加到初始海龟数量中。我想只用满意的海龟替换初始数字。我应该在同一个刻度上这样做吗?
    • 让我看看我是否明白你想要什么。假设您从第一个滴答中的 20 只海龟开始,8 只满意。然后12人会死。在下一个滴答声中,您是否想要相同位置的相同 8 个满意的海龟和 12 个新的(最初不满意,因为满意度被初始化为零)?还是您只想要相同位置的 8 只海龟并仍然满意,或者新位置的 8 只海龟,还是...?
    • 感谢您的评论!是的,我想要的是在下一个滴答声中,我希望有 8 只新的海龟(满足的那些)在一个新的位置发芽。更清楚地说:该模型是关于海滩上的游客。假设在第 1 天(第 1 天)满意的那些将在第 2 天(第 2 天)返回,但随后在不同的位置。然后以同样的方式再次计算他们的满意度。这可能吗?
    • 嗨,查尔斯,我想知道你是否看到了我的最后一条评论!我的代码仍然遇到问题:问题是游客不会在滴答声结束时离开。我知道这是因为我又发芽了,但我不知道该怎么做。我认为这很容易解决,但找不到合适的解决方案
    • 如果游客要保留他们的身份和与他们相关的任何变量,你能不能简单地让他们在下一个滴答(一天)开始时移动到一个新的(随机)位置,然后那天也有初来乍到的游客?假设您不希望在一块地块上超过一个游客,您可以只要求没有乌龟的块块来培育第一次来访者。
    猜你喜欢
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 2020-08-09
    相关资源
    最近更新 更多