【发布时间】:2017-05-01 18:32:02
【问题描述】:
我正在尝试在 NetLogo(5.3.1,Mac Sierra 上)中对容量限制和优先级进行建模。归结为要求有限数量的海龟(比如n)做某些事情,并选择这些海龟,以便(1)它们满足一定的条件,(2)它们是具有最大值的n海龟变量my-variable。
我正在尝试这样做:
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 的测试。
其次,即使有一些海龟满足条件,如果它们小于n,NetLogo 也会抛出同样的错误。我的模型是一个增长模型,其中容量意味着一开始就足够,然后达到约束。因此,这将在模型的每一次运行中发生。
我希望 NetLogo 最多执行ask 块中的命令n 次。假设有满足条件的m海龟:
1.如果m <= n,对所有m海龟执行命令
2.If m > n,执行n乌龟的命令,最高值为my-variable。有人可以建议吗?
【问题讨论】:
标签: constraints netlogo ranking