对此可能有一个非常简单的解决方案,但由于我还不熟悉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”程序,该程序将创建一个男性id var,它将雄性乌龟从0编号为男性n,另一个雌性id var将雌性乌龟从0编号为女性n 。我假设解决方案应该包括一些foreach或n值的组合,但是我确实很难解决它。谢谢!
答案 0 :(得分:3)
我很确定它不会“在模型后期更容易设置一些品种 - 自己的变量”。使用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]
但请...
答案 1 :(得分:0)
如果您创建了一个全局变量,并且在创建男性/女性过程中使用它,则可以执行此操作:
globals [id]
breed [males male]
breed [females female]
males-own [id-male]
females-own [id-female]
to setup
clear-all
create-breeds
ask turtles [setxy random-xcor random-ycor ]
reset-ticks
end
to create-breeds
set id 0
create-males number-males
[
set id-male id
set color yellow
set shape "circle"
set id id + 1
]
set id 0
create-females number-females
[
set id-female id
set color yellow
set shape "circle 2"
set id id + 1
]
end
您可以在创建过程中包含“设置形状”。