如何循环遍历 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 中完成。下面的可重现代码显示了如何使用 first
、lput
和 but-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
或者,您可以使用remainder
或mod
,结合ticks
的当前值,找出需要从中提取的项目的位置列表(您可以使用 item
提取它)。这个解决方案在某种程度上可能不如前一个更可取,因为它是 ticks-dependant(与前一个相反)。
另一种方法:实现一个计数器变量,每次您使用 lambda-values
中的值时该变量都会递增,并指示您要提取的下一个项目的位置,并在提取时重置为 0到达列表的末尾。这个最新的解决方案可能是最不受欢迎的,因为它需要您为计数器创建一个全局变量。
我想改变泊松过程的均值 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 中完成。下面的可重现代码显示了如何使用 first
、lput
和 but-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
或者,您可以使用remainder
或mod
,结合ticks
的当前值,找出需要从中提取的项目的位置列表(您可以使用 item
提取它)。这个解决方案在某种程度上可能不如前一个更可取,因为它是 ticks-dependant(与前一个相反)。
另一种方法:实现一个计数器变量,每次您使用 lambda-values
中的值时该变量都会递增,并指示您要提取的下一个项目的位置,并在提取时重置为 0到达列表的末尾。这个最新的解决方案可能是最不受欢迎的,因为它需要您为计数器创建一个全局变量。