我正在尝试创建一个模型,向海龟提出问题。每只乌龟代表一个独特的知识领域(1,2,3,4,5 ...),每个问题包含一个随机的域子集,例如(3 5 8)。
然后我想问问题中包含ID的海龟来回答它。我希望得到一些建议:
这是我第一次使用NetLogo,所以我为无知而道歉。而且我绝对不会要求你为我编写proc,但我可以在正确的方向/命令上使用一些建议来尝试。
对于2.比较,我写了以下内容,但我不确定这是否有效。我担心的是,如果它正在寻找问题数组与乌龟ID的完全匹配,则永远不会找到匹配。我想要的是,如果一个乌龟ID在阵列中任何地方,那么[设置专家? 2]:
to give-an-answer
foreach question [
if question = who [set expert? 2]
]
end
非常感谢您给我的任何建议!
由于 约翰
答案 0 :(得分:2)
如果您使用代理集而不是列表,则更容易。在NetLogo中使用代理集通常是很好的风格,并且通常比其他方法更容易。
您可以使用n-of
:
set question n-of turtles 10
然后一只乌龟可以通过member?
检查问题是否存在:
if member? self question
[ set expert? 2 ]
虽然如果你想让所有参与问题的海龟都将expert?
设置为2,那么最简单的方法就是这样做:
ask question [
set expert? 2
]
完成!无需if
或member?
或循环。
其他一些建议:
在NetLogo中,如果变量包含真值或假值,那么结尾带变量的变量是唯一惯用的。所以set expert? 2
读起来很奇怪。为什么不set expert? true
?如果你真的需要在这里使用整数,那么你应该从变量名中删除问号。
最好避免使用谁的号码。在NetLogo中使用谁的数字几乎总是使你的代码更难写,更难写 - 很少容易。
答案 1 :(得分:1)
感谢一个明确的问题。
第一部分可以通过输入和重复来完成。 Lput将成员添加到列表的左侧。它使用语法
Set mylist lput value mylist
价值将成为您随机的知识领域。因此,重复多次重复事情。
Repeat 10 [thing]
你需要重复一些代码。把它放在你得到的背景中。
Set question lput (random number-of-domains) question
第2部分。您正在寻找的原语是会员?它采用
的形式 Member? Value list
如果值在列表中,则返回true,否则返回false。