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如果您还没有更改,请一定查看以帮助您识别代码中的任何瓶颈。