Alb*_*ica 3 constraints ranking netlogo
我试图模拟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 >]
Run Code Online (Sandbox Code Playgroud)
但它有多个问题.
首先,如果没有乌龟满足条件[ 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 >]
]
Run Code Online (Sandbox Code Playgroud)
但它不起作用:
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
Run Code Online (Sandbox Code Playgroud)
NetLogo认为空代理集仍然是代理集,因此它将通过不同的测试nobody.
其次,即使有些海龟确实符合条件,如果它们少于,则NetLogo会抛出同样的错误n.我的模型是一个增长模型,其中容量在开始时就足够了,然后达到约束.因此,这将在模型的每次运行中发生.
我希望NetLogo ask在大多数情况下在块中执行命令n.假设有m海龟满足条件:1.如果m <= n,对所有m海龟2 If m > n执行命令,执行n具有最高值的海龟的命令my-variable.有人可以提供建议吗?
一般来说,我不建议测试是否count <agentset> = 0因为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 >]
]
Run Code Online (Sandbox Code Playgroud)