正在尝试为netlogo中的品种创建顺序ID变量 [英] trying to create a sequential ID variable for breeds in netlogo

查看:17
本文介绍了正在尝试为netlogo中的品种创建顺序ID变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个问题可能有一个非常简单的解决方案,但我想不出来,因为我对netlogo还很陌生。如有任何建议,我将不胜感激。我的模型有多个品种的海龟,每个品种通过滑块设置不同数量的海龟。为了便于稍后在模型中设置某些品种本身的变量,我希望为每个品种创建单独的顺序ID变量。这些数字基本上类似于谁的编号,但每个品种的编号范围是从0到n。因此,假设我创建了这样的雄性和雌性品种:

breed [males male]
breed [females female]

to setup
  clear-all
  create-breeds
  set-id
  ask turtles [setxy random-xcor random-ycor ]
  reset-ticks
end

to create-breeds
  create-males number-males [set color yellow] 
  ask males [set shape "circle"]
  create-females number-females [set color yellow] 
  ask females [set shape "circle 2"]
end

to set-id
...
end
然后,我想运行一个"set-id"过程,它将创建一个将雄性海龟编号从0到雄性n的雄性id变量,以及将从0到雌性n编号雌性海龟的另一个雌性id变量。我假设解决方案应该包括Foreach或n值的某种组合,但我很难准确地确定它。谢谢!

推荐答案

不要这样做!

我非常肯定它不会让稍后在模型中设置一些自有变量变得更容易。使用who数字很容易出错,因为它不需要在其上面添加另一个单独的索引。(您也不应该使用who数字:几乎总是有更好的方法来做事情。)我建议你问另一个单独的问题,告诉我们你为什么认为你需要它,以及你计划用它做什么。我相信,有人将能够提出替代方法。

话虽如此...

您说得对,foreachn-values组合可以达到目的。

假设您有:

males-own [ id ]
females-own [ id ]

您可以使用以下步骤:

to set-id-for [ breed-agents ]
  (foreach (sort breed-agents) (n-values count breed-agents [?]) [ 
    ask ?1 [ set id ?2 ]
  ])
end

通过使用括号foreach,您可以向它传递任意数量的列表:它将把它们压缩在一起,并为您提供像?1?2等变量来寻址每个列表的元素。在我们的示例中,第一个列表是代理,第二个列表是使用n-values生成的索引。

为每个品种调用该过程一次:

set-id-for males
set-id-for females

假设您已经创建了10个男性,并调用了set-id-for males,您可以使用指挥中心进行验证:

observer> show sort [id] of males
observer: [0 1 2 3 4 5 6 7 8 9]

但是请...

...不要这样做。

这篇关于正在尝试为netlogo中的品种创建顺序ID变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆