如何生成 table 将 turtle-own 变量链接到报价并在 24 个报价后更新此值

How to generate a table which links a turtle-own variable to ticks and updates this value after after 24 ticks

我是 Netlogo 的新手,但我想建立一个模型,其中代理(汽车 driver)在一天中的每个小时跟踪某个 turtle-own 变量(效用)。我 link 将报价调整为小时,所以一天有 24 个报价。

我打算整合两件事:

turtle-own [utility]

to setup
  __clear-all-and-reset-ticks

  ;; set the start date to January 1, 2020 and link the ticks to one hour
  set start-time time:create "2020/01/01 00:00"
  set current-time time:anchor-to-ticks start-time 1.0 "hour"
  time:anchor-schedule start-time 1.0 "hour"
end

to setup-turtles
ask turtles [
  set utility 0
]
end

to go
ask turtles [
  set utility utility + 1 ; just a placeholder for now - I'm still working on the true utility-function
]
end

但是我很难实施第一步,因为我不能每小时 link 到 turtle-own 变量 "utility"。

感谢任何帮助!

如果你只想让乌龟存储 24 个效用值(每小时 1 个),那么效用可以是一个列表而不是单个数字。您可以使用 item 访问适当的小时值,因此您可能有一些东西:

let hours ticks mod 24
let new-value 1 + item hours utility
replace-item hours utility new-value

请注意,您需要在列表中包含值才能访问它们。例如,当您的列表只有 5 个值时引用 item 9 将产生错误。此外,NetLogo 是 0 索引的。这意味着列表中的第一个值是通过 item 0 而不是 item 1.

访问的

正如您提到的您是 NetLogo 新手的一些观察结果。您不太可能需要此模型的时间延长。如果您基本上使用一小时的恒定时间步长,那么只需按正常方式使用 tick 即可。即使您在构建以某种方式引用实时的更复杂模型时最终需要使用时间扩展,您也可以在那时添加它。您还提到了 foreach - 该原语用于循环遍历列表,您不需要这样做。听起来您会循环遍历效用值列表以表示时间的变化 - 如果是这样,请不要这样做。查看 NetLogo 库中的一些示例模型并尝试理解时间的工作原理。您还应该了解这些模型中设置过程和 go 过程之间的分离,go 过程包含在一个时间步内必须发生的所有事情。您将需要 ticks(当前时间步长)和 tick(前进到下一个时间步长)。我怎么强调在任何模拟中理解这一点的重要性都不为过。