【问题标题】:Netlogo: How can I set timer counting for multiple turtles at once?Netlogo:如何同时为多只海龟设置计时器计数?
【发布时间】:2017-10-14 06:05:25
【问题描述】:

如何同时为多只海龟设置计时器计数?下面是示例语法。使用这种语法,如果存在两个海龟,计时器计数将在每个滴答声中累计计数 2。示例:2, 4, 6, 8, ...,另一个示例:如果存在 3 只海龟,则为 3,6,9,...,对每个刻度进行累积计数。递减定时器也有同样的问题。在这个模型中,一只乌龟在原点补丁(0 0)无限出生,经过一定的时间,乌龟一只一只地死去。即使有多个补丁也会出现此问题。我可能需要你的建议。谢谢。

    ask (turtles-on patch 0 0)
  [
    set count-up count-up + 1
  ]

【问题讨论】:

    标签: timer counter netlogo


    【解决方案1】:

    我认为您对全局变量和海龟拥有的变量之间的区别感到困惑。如果您在不同时间创建了多个海龟,那么您可能希望每个海龟都有自己的计时器(以便不同海龟的值可能不同)。如果您只需要一个全局变量来增加或减少每个刻度,那么不要将它放在ask 语句中。只需说“set counter counter + 1”之类的话。

    这是一个完整的模型,可以帮助您了解代码中发生了什么。

    globals [num-turtles counter ave-count-up]
    turtles-own [count-up]
    
    to setup
      clear-all
      set num-turtles 5
      reset-ticks
    end
    
    to go
      set counter counter + 1
      if count turtles < num-turtles
      [ ask patch 0 0
        [ sprout 1
          [ set count-up 0 ]
        ]
      ]
      ask (turtles-on patch 0 0)
      [ set count-up count-up + 1
        show count-up
      ]
      type "Current value of counter is " print counter
      type "Number of turtles: " print count turtles
      type "Total of all turtle counters: " print sum [count-up] of turtles
      set ave-count-up mean [count-up] of turtles
      tick
    end
    

    【讨论】:

    • 您的断言不正确,BehaviorSpace 可以在框中记录任何被告知要记录的有关要记录的措施——而不仅仅是全局变量。但是记录所有单个海龟的值很尴尬,因为要记录的值很多,而且值的数量会发生变化。例如,也许您可​​以摆脱最大值、最小值、平均值和标准差?如果没有,您仍然可以告诉 BehaviorSpace 记录所有值,但您需要对 csv 文件进行一些处理。
    • 这也不对。创建您的显示器以显示mean [count-up] of turtles。不过,我将编辑上面的程序,向您展示如何将您想要的作为全局变量。
    • 我怀疑你将tick 放在ask turtles [ ] 中,你不应该这样做。如果您查看我上面的代码,您将看到tickgo 过程中end 之前的最后一个命令,并且它不在任何其他代码块中。你真的做过 NetLogo 网站上的教程吗?如果没有,我建议你这样做,因为它们会帮助你了解一些基本概念,NetLogo 与其他语言不同。
    • 感谢您的建议。我已经完成了教程,但我不太了解它。我的经验是 Fortran、C,但 Netlogo 是我的第一次。我所在的地区还没有以 Netlogo 闻名。我在这个网站上学到了很多东西。谢谢。
    • 是的,我想你可能是一名程序员——对于已经有编码经验的人来说,最初学习 NetLogo 可能会很困难,因为它的思维方式与其他语言不同。一个很大的区别是所谓的“上下文”是谁在执行操作(观察者、乌龟、补丁、链接)。 Fortran/C 实际上只有相当于观察者——整个程序的控制器。 NetLogo 更加自下而上。一旦你理解了我的代码是如何以及为什么工作的(特别是在观察者和乌龟之间切换ask),再试一次教程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多