我在 netlogo 中错误地使用了 n-of 函数吗?

Am I using n-of function incorrectly in netlogo?

我正在创建一个代码,该代码应该使一定数量的海龟状态为 1,其余的状态为 0,该数字是使用界面中的滑块输入计算的。我一直在尝试让程序使用 n-of,但它将超过所需数量的海龟变成了 1 种(海龟从之前设置为状态 0)。

下面的代码(单人的开关是改成只有一只乌龟,翻滚的开关是用来模拟翻滚的运行):

to spawn
  ifelse (single = false )
  [create-turtles N  [
    set color black
    set xcor 0
    set ycor 0
    set heading random-float 360
    set status 0
    if (tumble = true)
    [
      print (N * p1 / (p1 + p2))
      ask n-of (N * p1 / (p1 + p2)) turtles [set status 1 set color red]]
    ]
  ]
  [create-turtles 1  [
    set color black
    set xcor 0
    set ycor 0
    set heading random-float 360
    pendown
  ]]

end

问题出在 ask n-of 语句的位置。代码是 create-turtles N 之后的括号,为每个创建的海龟执行,所以 N 个创建的海龟中的每一个依次要求 n-of ... 海龟将状态设置为 1。你会得到更多乌龟比你想要的。将 if (tumble ... 块移出 create-turtles 块应该会导致它只执行一次,在所有 N 只海龟创建之后。

to spawn
  ifelse (single = false ) [
    create-turtles N  [
      set color black
      set xcor 0
      set ycor 0
      set heading random-float 360
      set status 0
    ]
    if (tumble = true) [
      print (N * p1 / (p1 + p2))
      ask n-of (N * p1 / (p1 + p2)) turtles [set status 1 set color red]
    ]
  ]
  [create-turtles 1  [
    set color black
    set xcor 0
    set ycor 0
    set heading random-float 360
    pendown
    ]
  ]
end