我有一个模拟,并且有些情况下,最终应该通过所有可能组合的功能不是。所以我开始设置随机种子值,直到我可以复制它...果然,函数永远不会返回它最终应该具有的值。
这是函数,我在这里使用的东西会导致随机部分中断吗? - 我只是不明白是什么原因导致我的代码失败,让我感到沮丧,直到最后。
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
答案 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