netlogo中的逻辑问题

问题描述 投票:0回答:1

我写这个条件:

if [estado] of (transmilenios with [xcor = 0.5]) = "vacio" []

我正在看netlogo的结果,我问观察者:

[estado] of (transmilenios with [xcor = 0.5]) 

回答:[“空”]

然后我问:

[estado] of (transmilenios with [xcor = 0.5]) = "vacio"

答案是错误的。

我很头疼这个哈哈。有人能帮我吗?

我试图使用变量estado作为0/1。同样的答案

Estado = "vacio"/"lleno"

我也试过了

 if [estado] of (transmilenios with [xcor = 0.5]) != "lleno"

但当estado =“lleno”时它会发生相同的情况

if-statement condition netlogo
1个回答
1
投票

简而言之,[vacio]不等于"vacio",因为[vacio]是一个列表。这里的问题是您将列表与单个值进行比较。将of与agentset一起使用时,就像使用[estado] of (transmilenios with [xcor = 0.5])一样,NetLogo会返回所有值的列表。即使您在查询的代理程序集中只有一个代理程序,它也会返回一个列表。如何解决这个问题可能取决于你的建模。最简单的解决方法可能是使用one-of作为解决方法:

[estado] of (one-of transmilenios with [xcor = 0.5]) = "vacio"

但是,如果您尝试使用transmilenios的不同值来评​​估多个estado,那么这将无效,因为您一次只能访问单个乌龟的estado值。

有关工作示例,请考虑以下设置:

turtles-own [ estado ]

to setup
  ca
  crt 5 [ set estado one-of [ "vacio" "lleno" ] ]
  reset-ticks
end

如果我print [estado] of turtles我输出像:[lleno vacio lleno lleno vacio]。所以,如果我将[lleno vacio lleno lleno vacio]vacio进行比较,那么答案显然是错误的。

如果我改为print [estado] of one-of turtles我得到llenovacio作为输出 - 所以评估print [estado] of one-of turtles = "vacio"将返回true或false。

我希望有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.