【问题标题】:NetLogo: Create random array for global variableNetLogo:为全局变量创建随机数组
【发布时间】:2014-11-04 11:32:59
【问题描述】:

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

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

  1. 如何为问题创建随机数组(全局变量)和;
  2. 如何将其与海龟 ID 进行比较。

这是我第一次使用 NetLogo,所以我为我的无知道歉。而且我绝对不是要你为我编写过程,而是我可以使用一些关于正确方向/命令的建议来尝试。

对于 2. 比较,我写了以下内容,但我不确定这是否可行。我担心的是,如果它正在寻找与海龟 ID 完全匹配的问题数组,则永远找不到匹配项。我的意图是,如果海​​龟 ID 在数组中的任何位置,那么 [设置专家? 2]:

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

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

谢谢 约翰

【问题讨论】:

  • 感谢 Seth 和 King-Ink,我想我已经解决了这个问题。我正要分析输出,看看它是否有意义,但这里是代码:

标签: arrays comparison netlogo


【解决方案1】:

如果您使用代理集而不是列表,则更容易。在 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?如果这里确实需要使用整数,那么应该去掉变量名中的问号。

  • 最好完全避免使用 who 号码。在 NetLogo 中使用 who 号码几乎总是会使您的代码更难编写、更复杂——很少容易。

【讨论】:

  • 谢谢谢谢谢谢!不仅是为了解决我的问题,而且是为了发现我的代码中的其他一些缺陷。我将在下面发布完成的代码...
【解决方案2】:

感谢您提出明确的问题。

第一部分可以用 lput 完成并重复。 Lput 将一个成员添加到列表的左侧。它使用语法

 Set mylist lput value mylist

价值将是您的随机知识领域。重复这样的事情 n 次。

 Repeat 10 [thing]

你想要重复的代码在哪里。把它放在你得到的上下文中。

Set question lput (random number-of-domains) question

第 2 部分。您要查找的原语是 member?它的形式是

 Member? Value list

如果值在列表中,则返回 true,否则返回 false。

【讨论】:

  • 感谢一百万,墨王
猜你喜欢
  • 2016-10-25
  • 2017-11-12
  • 2018-05-31
  • 2018-08-31
  • 2014-11-29
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多