这是对NetLogo Efficient way to create fixed number of links的跟进问题。专注于避免嵌套的“询问”之后,我现在有了这段代码。它效率更高,但是创建了太多链接。显然是逻辑错误,但我看不到。
globals
[ candidates
friends
]
to setup
clear-all
set friends 2
create-turtles 5000
set candidates turtles
make-network
end
to make-network
ask turtles
[ let new-links friends - count my-links
if new-links > 0
[ let chosen n-of min (list new-links count other candidates) other candidates
create-links-with chosen [ hide-link ]
set candidates other candidates
ask chosen [ if my-links = friends [ set candidates other candidates ] ]
]
]
end
最佳答案
不错的解决方案!请注意,other candidates
实际上是iterates through every agent in the agentset,因此它在许多代理程序下仍然会变慢,但比在your other question中要慢,因为它没有那些代理程序来运行代码。它的运行速度给我留下了深刻的印象!
到了错误。在这一部分:if my-links = friends [ set candidates other candidates ]
我认为您忘记了count
前面的my-links
。
该代码最终仍可以由某些代理使用,但它们的数量少于friends
,因为世界可能在到达候选者之前就已不在候选者之列。不知道您对此有多关心。您只需清除链接,然后重试,直到获得正确的号码为止。只要friends
很小,那应该没关系。
请注意,您可以通过将set candidates other candidates
放在开头来加快代码的速度,如下所示:
set candidates other candidates
if new-links > 0
[ let chosen n-of min (list new-links count candidates) candidates
create-links-with chosen [ hide-link ]
ask chosen [ if my-links = friends [ set candidates other candidates ] ]
]
这样,您就不必多次计算
other candidates
。关于NetLogo高效地创建具有任意程度分布的网络,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33000956/