Netlogo:变量有时列表有时数字,结果出错

Netlogo:变量有时列表有时数字,结果出错,netlogo,agent-based-modeling,Netlogo,Agent Based Modeling,我有一个记者,当我运行它的时候,它工作得很好,但当我添加了一个条件时,它却错了 我所有的海龟都有两个称为var_a和var_b的三维向量。当我为我的整个世界运行时,没有问题: to-report turtle-bounds [p] let p-lower (([item 0 var_a] of p) - ([item 0 var_b] of p)) let p-upper (([item 0 var_a] of p) + ([item 0 var_b] of p))

我有一个记者,当我运行它的时候,它工作得很好,但当我添加了一个条件时,它却错了

我所有的海龟都有两个称为
var_a
var_b
的三维向量。当我为我的整个世界运行时,没有问题:

to-report turtle-bounds [p]
      let p-lower (([item 0 var_a] of p) - ([item 0 var_b] of p))
      let p-upper (([item 0 var_a] of p) + ([item 0 var_b] of p))
      let bounds list p-lower p-upper
      report bounds
end
但当我在有条件的情况下运行时

to condition
    let p1 turtles with-max [item 0 var_a]
    turtle-bounds p1
end
我得到以下信息:

  • 预期输入为数字,但改为获取列表[0.9967359117803329]
它引用了一个var_a的值,这意味着我的限制使得p的
[item 0 var_a]给出了一个列表而不是一个数字


有什么想法吗?

海龟边界
是以单个代理作为其参数编写的,但是带有max的
返回一个代理集。在将p1指定给
海龟边界之前,您可以使用
原语中的
一个,将代理集转换为代理

to condition
    let p1 turtles with-max [item 0 var_a]
    turtle-bounds one-of p1
end
或者,您可以在
turtlebounds
中检查
p
,查看它是否是代理集

if is-agentset? p [set p one-of p]

并在那里进行转换,尤其是在其他情况下,
turtle bounds
可能被馈送一个代理集而不是代理。

turtle bounds
以单个代理作为其参数,但
with max
返回一个代理集。然而,我不确定为什么在agentset上运行
turtle bounds
会产生这种特殊的错误。如果在
to condition
中,使用p1
中的一个将代理集简化为代理,会发生什么情况?顺便说一句,p1可以有多个代理吗?嗨,查尔斯,谢谢你的评论。我尝试了你的方法,它确实有效:)。理论上,p1可能有不止一个代理,但由于var_1是随机分配的,我认为max应该只选择一个。我不是专家,但可能是
turtles
总是将代理集标记为一个列表,即使只选择了一个,因此在这种情况下,
。。。如果你想键入答案,请随意键入,否则我将自己键入。谢谢