我在使用“ask n-of#”命令时遇到了麻烦。收到一条“此处为预期数字,而不是列表或 block ”错误消息。
添加了与此错误相关的主要代码块。 想知道是否有人可以提供帮助?
目标:希望用太阳能一次只为小队 1 中的 6 只海龟充电(小队 1 是我饲养的 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代码
**这是我需要帮助的代码块。我收到一条“这里是预期数字,而不是列表或 block ”消息,其中 Netlogo 突出显示了“询问 6 个小队中的 n 个 [”
之后的所有内容 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 只海龟在移动。请注意,如果您更改为这种更常见的结构,则需要将其他相关调用从 askquad1 [ ...
更新为 askquad1s
。
但是,如果您打算 squad1
为复数,那么您对 n-of
的调用应读取为 ask 6 个小队中的 n 个 [...
.
编辑
我稍微修改了您的代码,以检查是否所有海龟
都在“刷新战斗负载”,并且我没有显示该行为 - 每个周期只有两只海龟正在刷新负载。使用您编辑的代码的这个(非常轻微的)修改版本:
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
当我使用新的 print 语句运行 go 时,refresh-combat-load
只查询了两只海龟:
您能否进一步解释一下您期望看到的但此处没有发生的行为?
关于variables - 对 Netlogo 中的品种使用 "n-of"命令时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69683407/