我试图在NetLogo (5.3.1,Mac上)中对容量限制和优先级进行建模。它可以归结为要求有限数量的海龟(比如n)来做某些事情,并选择这些海龟,以便(1)它们满足某种条件,(2)它们是具有变量my-variable最大值的n海龟。
我试图通过以下方式来做到这一点:
let subset-of-turtles turtles with [ condition-variable = some-value ]
ask max-n-of n subset-of-turtles [ my-variable ] [< do something >]但它有很多问题。
首先,如果没有海龟满足[ condition-variable = some-value ]的条件,NetLogo就会抛出一个错误。
从一组仅0代理中请求n个随机代理。
我尝试通过在ask命令之前插入一行来解决问题:
let subset-of-turtles turtles with [ condition-variable = some-value ]
if subset-of-turtles != nobody [
ask max-n-of n subset-of-turtles [ my-variable ] [< do something >]
]但它不起作用:
observer> show turtles with [ condition-variable = some-value ]
observer: (agentset, 0 turtles)
observer> let subset-of-turtles turtles with [ condition-variable = some-value ] show subset-of-turtles != nobody
observer: true NetLogo认为空代理集仍然是代理集,因此它将通过与nobody不同的测试。
其次,即使有一些海龟确实满足了这个条件,如果NetLogo比n少的话,它们也会抛出同样的错误。我的模型是一个增长模型,在这个模型中,最初的容量是足够的,然后才能达到约束。因此,这将发生在模型的每一次运行中。
我希望NetLogo最多在ask块中执行n命令。假设有满足条件的m海龟: 1.如果是m <= n,在所有m海龟上执行命令2. If m > n,执行值最高的n海龟的命令my-variable。有人能给我建议吗?
发布于 2017-05-02 12:17:02
通常,我不建议测试count <agentset> = 0是否是NetLogo,因为NetLogo仍然需要构造代理集来计数它。但是,有一个非常方便的any?记者来完成这项任务。因此,尝试对原始代码进行以下修改:
let subset-of-turtles turtles with [ condition-variable = some-value ]
if any? subset-of-turtles [
ask max-n-of n subset-of-turtles [ my-variable ] [< do something >]
]https://stackoverflow.com/questions/43724387
复制相似问题