在 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
只查询了两只海龟:
您能否进一步解释一下您希望看到的哪些行为不会在此处发生?
我运行在使用“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
只查询了两只海龟:
您能否进一步解释一下您希望看到的哪些行为不会在此处发生?