首页 > 解决方案 > NetLogo:如何让海龟在一次滴答后返回

问题描述

希望你能帮帮我!我对以下代码有一个 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 的海龟死亡。然后,剩下的(满意的)乌龟将再次发芽,并再次计算它们的满意度。

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

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

标签: netlogoagent-based-modeling

解决方案


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

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

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

次要观点:约定是放在程序tick的末尾,而不是go程序的开头。


推荐阅读