Netlogo 效率澄清:询问一般海龟类型的子集还是询问品种?
我正在使用一个大型模型,其中有许多代理每天执行许多过程 这样做是否更好:Netlogo 效率澄清:询问一般海龟类型的子集还是询问品种?,netlogo,Netlogo,我正在使用一个大型模型,其中有许多代理每天执行许多过程 这样做是否更好: ask turtles [ if type = "A" [do-A-thing] if type = "B" [do-B-thing] ] 或者 ask A-turtles [do-A-thing] ask B-turtles [do-B-thing] 我希望降低计算量。以下是一个尝试这两种方法的示例。它创建了100000只海龟,并对每个案例执行1000次测试。方法2似乎更快。在我的机器上,进近1用了46.3秒,进
ask turtles [
if type = "A" [do-A-thing]
if type = "B" [do-B-thing]
]
或者
ask A-turtles [do-A-thing]
ask B-turtles [do-B-thing]
我希望降低计算量。以下是一个尝试这两种方法的示例。它创建了100000只海龟,并对每个案例执行1000次测试。方法2似乎更快。在我的机器上,进近1用了46.3秒,进近2用了30.6秒。在方法1中使用ifelse没有多大帮助。因为避免比较,所以方法2的速度更快似乎是合乎逻辑的
breed[A-turtles A-turtle]
breed[B-turtles B-turtle]
turtles-own [
typ
]
; setup button callback function
to setup
clear-all
; create turtles for approach 1
create-turtles 100000
ask turtles [
ifelse (who < 50000) [
set typ "A"
]
[
set typ "B"
]
]
; time approach 1
let i 0
let iter 1000
reset-timer
while [ i < iter ]
[
; approach 1
ask turtles [
if typ = "A" [
doSomething
]
if typ = "B" [
doSomething
]
]
set i i + 1
]
print (word "approach 1 time: " timer " secs")
; delete turtles, then create turtles for approach 2
clear-all
clear-turtles
create-A-turtles 50000
create-B-turtles 50000
; time approach 2
set i 0
reset-timer
while [ i < iter ]
[
; approach 2
ask A-turtles [ doSomething ]
ask B-turtles [ doSomething ]
set i i + 1
]
print (word "approach 2 time: " timer " secs")
end
to doSomething
let i 0
set i i + 1
set i i - 1
end
繁殖[甲鱼甲鱼]
繁殖[海龟]
乌龟自己的[
类型
]
; 设置按钮回调函数
设置
清除所有
; 为方法1创造海龟
创造海龟100000只
问海龟[
ifelse(世卫组织<50000)[
设置类型“A”
]
[
设置类型“B”
]
]
; 时间方法1
让我0
让iter 1000
重置计时器
而[i
我只是自己测试了一下,得到了与您类似的数字。很遗憾,我认为这是我可能需要在代码中更改的内容。@AndrewYoak如果您还没有更改,请一定查看以帮助您识别代码中的任何瓶颈。