正在尝试为netlogo中的品种创建顺序ID变量 [英] trying to create a sequential ID variable for breeds in netlogo
本文介绍了正在尝试为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
数字:几乎总是有更好的方法来做事情。)我建议你问另一个单独的问题,告诉我们你为什么认为你需要它,以及你计划用它做什么。我相信,有人将能够提出替代方法。
话虽如此...
您说得对,foreach
和n-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屋!
查看全文