Netlogo - 函数应该是随机的但不是

时间:2015-05-13 19:07:26

标签: netlogo

我有一个模拟,并且有些情况下,最终应该通过所有可能组合的功能不是。所以我开始设置随机种子值,直到我可以复制它...果然,函数永远不会返回它最终应该具有的值。

这是函数,我在这里使用的东西会导致随机部分中断吗? - 我只是不明白是什么原因导致我的代码失败,让我感到沮丧,直到最后。

to-report topk-newRandom [active-turtle k] ;returns a random list of turtles
  ;put the agent-set of turtles in a list of random order
  let topk sort n-of (count turtles with [document?]) turtles with [document?]

  ;remove turtles that are already connected to the active-turtle
  foreach topk [if (member? ? link-neighbors) [set topk remove ? topk]]

  ;limit the size of the list to being <= k
  if (length topk > k) [set topk sublist topk 0 k]
  report topk
end

1 个答案:

答案 0 :(得分:2)

问题在于第一行:
let topk sort n-of (count turtles with [document?]) turtles with [document?]
它应该以随机顺序返回一个代理列表,但看起来它完全相反,将代理集转换为列表的排序也取出了随机顺序(&#34; sort&#34;真的应该曾经是一个巨大的红旗。)

我查找了如何获取随机排序的代理列表,并找到了:[self] of turtles

将其应用于我的代码解决了这个问题。它看起来也更好

to-report topk-newRandom [active-turtle k]
  let topk [self] of turtles with [document?]
  foreach topk [if (member? ? link-neighbors) [set topk remove ? topk]]
  if (length topk > k) [set topk sublist topk 0 k]
  report topk
end