在 Netlogo 中使用带有品种的 "n-of" 命令时出错

Error using "n-of" command with a breed in Netlogo

我运行在使用“ask n-of #”命令时遇到了麻烦.. 得到了“此处需要的数字,而不是列表或块”的错误消息。

添加了与此错误相关的主要代码块。 想知道是否有人可以提供帮助?

目标:希望太阳能一次只为 squad1 中的 6 个充电(squad1 是我养的 10 只乌龟)。下面注释...

    breed [squad1 squad1s]

    turtles-own
    [individual-power
    solar-delay
    power-count1
    count-recharge1]

设置

    to setup 
    clear-all
    setup-patches
    setup-turtles
    reset-ticks
    end

    to setup-turtles
    create-squad1 10
    ask squad1
    [
    set color blue
    set shape "person"
    set size 1.7
    set individual-power 100
    set heading 90
    set solar-delay 0
    setxy random-xcor random-ycor
    ]
    end

    to go
    ask squad1 [
    if individual-power >= 15
    [forward 1
    set label individual-power
    set individual-power individual-power - 1
    set solar-delay solar-delay + 1]

    if recharge-options1 = "external-solar1" [solar-battery1]
    ]
    tick
    end

太阳能电池1代码

**这是我需要帮助的代码块。我收到一条“预期数量,而不是列表或阻止”消息,其中 Netlogo 在“询问 n-of 6 squad1s ["

之后突出显示所有内容
    to solar-battery1
    ask n-of 6 squad1s [ 
    if solar-delay >= 85
    [set individual-power 15]
    if solar-delay >= 91 ; increase in 6 ticks..
    [set individual-power 100
    set individual-power individual-power - 1
    set solar-delay 0]
    ]
    end

更新... 再次遇到类似的问题(n-of 命令不起作用)但是这次我的海龟复数是正确的(哈)。有任何想法吗?当我尝试 运行 这段代码时,所有五只乌龟都执行了该功能,而不是我想要的随机 2。

    turtles-own
    [ battery_1
    ]

    to setup
    ca

    reset-ticks
    create-turtles 5
    ask turtles [
    set color blue
    set shape "default"
    set size 1.5
    set xcor 0
    set ycor who
    set battery_1 100 
    ]
    end

   to go
   turtles-use-power
   if recharge-options = "refresh-combat-load" [refresh-combat-load] 
   tick
   end


   to turtles-use-power
   ask turtles [
   if battery_1 >= 15
   [set battery_1 battery_1 - 4 * round random-float 1
   set label battery_1 ]
   ]
   end


   to refresh-combat-load ;;
   ask n-of 2 turtles [
   if battery_1 <= 15
   [set battery_1 100 ]]
   end

我认为您的品种声明倒退了 - 它应该是复数形式,然后是单数形式。试试这个玩具模型:

breed [squad1s squad1]

to setup
  ca
  create-squad1s 10 
  reset-ticks
end

to go
  ask n-of 6 squad1s [
    fd 1
  ]
end

你应该看到每次调用 go 时只有 6 只海龟在移动。请注意,如果更改为这种更常见的结构,则需要将其他相关调用从 ask squad1 [ ... 更新为 ask squad1s

但是,如果您打算 squad1 是复数,那么您对 ​​n-of 的调用应读作 ask n-of 6 squad1 [...

编辑

我稍微修改了您的代码以检查是否所有 turtles 都是 'refreshing combat load' 并且我没有显示该行为 - 每个滴答只有两只海龟正在刷新负载。使用此(非常轻微)修改后的代码版本:

turtles-own [ battery_1 ]

to setup
  ca
  reset-ticks
  create-turtles 5
  ask turtles [
    set color blue
    set shape "default"
    set size 1.5
    set xcor 0
    set ycor who
    set battery_1 100 
  ]
end

to go
  print word "Current tick: " ticks
  turtles-use-power
  refresh-combat-load
  tick
end


to turtles-use-power
  ask turtles [
    if battery_1 >= 15
    [set battery_1 battery_1 - 4 * round random-float 1
      set label battery_1 ]
  ]
end

to refresh-combat-load ;;
  ask n-of 2 turtles [
    show "I am refreshing combat load"
    if battery_1 <= 15 [
      set battery_1 100 
    ]
  ]
end

当我运行使用新的打印语句时,refresh-combat-load只查询了两只海龟:

您能否进一步解释一下您希望看到的哪些行为不会在此处发生?