如何循环遍历 NetLogo 中的值?

How to loop through values in NetLogo?

我想改变泊松过程的均值 lambda,每次 ticks 提前一个。

假设 lambda 是以下数字的预定列表:[1 2 3 4 5]。

如果我这样定义lambda,NetLogo是否可以根据时间步长循环遍历列表的每个位置?例如,在第一个 tick 时,NetLogo 会将 lambda 设置为等于列表的第一项,这样 lambda = 1,当 tick = 2 时,lambda = 2,等等

这是我正在尝试做的一个例子:

to recruit-spores

  ask turtles with [color = red] [

    hatch-spores random-poisson lambda ; lambda is what I want to change at every tick

      [set shape "dot"
       set size 0.01
       set color orange
       setxy random-xcor random-ycor ]

    ] 

end 

有没有办法通过在 NetLogo 中循环遍历列表来更改 lambda 的值?是通过 NetLogo 的内置功能,还是通过扩展?有没有办法使用 R 扩展来做到这一点?

如果需要,可以直接在 NetLogo 中完成。下面的可重现代码显示了如何使用 firstlputbut-first 获取(在本例中为打印)列表的第一个值,然后将其附加到列表的末尾名单:

globals [
  lambda-values
]

to setup
  set lambda-values [1 2 3 4 5]
end

to go
  print first lambda-values
  set lambda-values lput (first lambda-values) lambda-values
  set lambda-values but-first lambda-values
  
  tick
end

将此放入您的示例中,它将是:

to recruit-spores

  let current-lambda first lambda-values
  set lambda-values lput current-lambda lambda-values
  set lambda-values but-first lambda-values

  ask turtles with [color = red] [
    hatch-spores random-poisson current-lambda [
      set shape "dot"
      set size 0.01
      set color orange
      setxy random-xcor random-ycor
    ]
  ] 
end 

或者,您可以使用remaindermod,结合ticks的当前值,找出需要从中提取的项目的位置列表(您可以使用 item 提取它)。这个解决方案在某种程度上可能不如前一个更可取,因为它是 ticks-dependant(与前一个相反)。

另一种方法:实现一个计数器变量,每次您使用 lambda-values 中的值时该变量都会递增,并指示您要提取的下一个项目的位置,并在提取时重置为 0到达列表的末尾。这个最新的解决方案可能是最不受欢迎的,因为它需要您为计数器创建一个全局变量。