我对 NetLogo 还很陌生,这就是我被困在这里几周的原因。
我想做的是让特工分成 2 队 4 人一组。
我的计划是让一个函数保存 4 个海龟 ID,
to assign-groupmates [a1 a2 a3 a4]
并将他们分配到团队 1
assign-groupmates [a1 a2 a3 a4] =team1[]
if team1 > 4
assign-groupmates [a1 a2 a3 a4] =team2[]
我所做的是:
to assign-groupmates [ f g h i]
let A who random f
let B who random g
let C who random h
let D who random i
ifelse f != g, g != h, h != i, i != g
[ set group-id 1
separate
align
cohere ]
[assign-groupmates [W X Y Z]
set group-id 2]
end
如何找到海龟 ID 以及如何通过参数发送它们?
我使用的海龟 ID 是随机的。
谢谢。
有许多不同的方法可以实现您想要的目标,但让我从一条一般性建议开始:
不要使用 who
如果可以避免的话。
它们有一些合法的用途,但这些用途很少。它们很容易出错,会导致代码丑陋,而且往往会让你对要解决的问题产生错误的想法。
NetLogo 允许您存储对代理的直接引用,例如:
ask turtles [ set friend one-of other turtles ]
一般来说,用它来代替。
但就您而言,您可能不应该存储对代理的单独引用。由于您正在处理代理组,因此您应该使用代理集。
这里有一个建议:制作一个名为的全局代理集列表groups
。除此之外,让每个代理存储对构成其组的代理集的引用。这是实现这一目标的一种方法:
globals [ groups ]
turtles-own [ my-group ]
to setup
clear-all
let number-of-groups 2
let turtles-per-group 4
create-turtles turtles-per-group * number-of-groups
set groups [] ; empty list
repeat number-of-groups [
let new-group n-of turtles-per-group turtles with [
not is-agentset? my-group
]
ask new-group [ set my-group new-group ]
set groups lput new-group groups
]
print (word "First group: " sort first groups)
print (word "Second group: " sort last groups)
; each turtle can easily access other members of its group:
ask turtles [ show sort other my-group ]
end
这段代码的优点是非常灵活。如果您想要超过两组,或每组超过四只海龟,这是一个非常容易的更改。
另一条一般建议:如果您发现自己使用多个变量,例如a1
, a2
, a3
等等,你可能做错了什么。您应该改用列表和/或代理集。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)