NetLogo:为全局变量创建随机数组

时间:2014-11-04 11:32:59

标签: arrays comparison netlogo

我正在尝试创建一个模型,向海龟提出问题。每只乌龟代表一个独特的知识领域(1,2,3,4,5 ...),每个问题包含一个随机的域子集,例如(3 5 8)。

然后我想问问题中包含ID的海龟来回答它。我希望得到一些建议:

  1. 如何为问题创建随机数组(全局变量)和;
  2. 如何将其与乌龟ID进行比较。
  3. 这是我第一次使用NetLogo,所以我为无知而道歉。而且我绝对不会要求你为我编写proc,但我可以在正确的方向/命令上使用一些建议来尝试。

    对于2.比较,我写了以下内容,但我不确定这是否有效。我担心的是,如果它正在寻找问题数组与乌龟ID的完全匹配,则永远不会找到匹配。我想要的是,如果一个乌龟ID在阵列中任何地方,那么[设置专家? 2]:

    to give-an-answer
      foreach question [
        if question = who [set expert? 2]
      ]
    end
    

    非常感谢您给我的任何建议!

    由于 约翰

2 个答案:

答案 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
]

完成!无需ifmember?或循环。

其他一些建议:

  • 在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。