首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NetLogo:询问有限数量的海龟,按变量的值排列

NetLogo:询问有限数量的海龟,按变量的值排列
EN

Stack Overflow用户
提问于 2017-05-01 18:32:02
回答 1查看 1.4K关注 0票数 3

我试图在NetLogo (5.3.1,Mac上)中对容量限制和优先级进行建模。它可以归结为要求有限数量的海龟(比如n)来做某些事情,并选择这些海龟,以便(1)它们满足某种条件,(2)它们是具有变量my-variable最大值的n海龟。

我试图通过以下方式来做到这一点:

代码语言:javascript
复制
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命令之前插入一行来解决问题:

代码语言:javascript
复制
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 >]
  ]

但它不起作用:

代码语言:javascript
复制
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。有人能给我建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-02 12:17:02

通常,我不建议测试count <agentset> = 0是否是NetLogo,因为NetLogo仍然需要构造代理集来计数它。但是,有一个非常方便的any?记者来完成这项任务。因此,尝试对原始代码进行以下修改:

代码语言:javascript
复制
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 >]
  ]
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43724387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档