variables - 对 Netlogo 中的品种使用 "n-of"命令时出错

标签 variables nested set grouping netlogo

我在使用“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 只查询了两只海龟:

enter image description here

您能否进一步解释一下您期望看到的但此处没有发生的行为?

关于variables - 对 Netlogo 中的品种使用 "n-of"命令时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69683407/

相关文章:

parsing - go/types 查找结构是否实现了接口(interface)

javascript - 从范围 slider javascript更新输入获取变量?

c - 在函数中使用#define

javascript - 从 selenium 中的 javascript 读取变量

python - 如何覆盖 "set"内置?

java - 如何避免 Java 中 List<List<Integer>> 中的重复列表

php - 如何在 php 中创建带有嵌套对象的响应 json?

c++ - super 对撞机二维阵列 : generative nesting : wrap/size issues

紧凑访问嵌套结构中的变量

java - 生成一些数字范围内所有排列的序列