我的海龟拥有一个名为朋友的列表作为变量之一。现在对于每只乌龟,我想随机分配$ x $朋友。但我面临的问题如下
如果$ a $是$ b $的朋友,则自动$ b $将成为$ a $的朋友。但我无法做到。 有人可以帮我创建一个列表朋友。
以下是我尝试的方式。
to setup-agent-friends
ask turtles [
set friends []
repeat x [
set temp random q ; q is total number of agents
set friends lput [who] of turtle q
]
end
如何消除列表中重复的朋友? 如何保持朋友的对称性,即如果x是y的朋友,则y是x的朋友。
注意:每个代理商都有正好$ x $的邻居。
谢谢
答案 0 :(得分:2)
在这种情况下,链接似乎比列表更好。如果你这样做
to setup-agent-friends
ask turtles [
let friends-needed x - count my-links
let turtles-needing-friends other turtles with [ count my-links < x ]
let available-turtles turtles-needing-friends with [ not member? self [ link-neighbors ] of myself ]
create-links-with n-of friends-needed available-turtles
]
end
每只乌龟将与其他海龟完全相连x
。由于链接的对称性,让它成为x
朋友是有点棘手的:当乌龟试图交朋友时,他们可能已经是一些乌龟的朋友,他们不应该尝试结交朋友任何已经有足够朋友的海龟。
let friends-needed x - count my-links
计算出他们需要多少朋友。
let turtles-needing-friends other turtles with [ count my-links < x ]
让所有其他海龟仍然可以结交新朋友。
let available-turtles turtles-needing-friends with [ not member? self [ link-neighbors ] of myself ]
摆脱了当前乌龟已经与之相关的那些乌龟。
create-links-with n-of friends-needed available-turtles
抓住这些海龟的friends-needed
并与它们建立联系。
NetLogo支持使用链接。有a lot of primitives that help you work with them。它们会自动为您提供所需的对称性。他们还帮助您形象化友谊。如果您不想看到友谊,可以ask links [ hide-link ]
隐藏它们。
正如评论中所指出的,有时候这段代码会引发运行时错误,而一些海龟最终会得到少于正确数量的朋友。这是我在发布之前没有测试我的代码所得到的......那就是说,这是一个有趣的问题。
假设我们有100只海龟,并希望每只海龟都有2个朋友。在为前99只海龟分配朋友的同时,他们没有机会连接到第100只。因此,第100只乌龟将需要两个朋友,但所有其他乌龟已经拥有他们需要的所有朋友。或者,前98只龟可能根本不连接到最后2只龟。然后,最后2个将相互连接,但每个需要另外1个朋友。像这样的情况越来越可能是所需数量的朋友越多。
事实证明,解决这个问题实际上非常棘手。问题在于,最简单的解决方案会偏向朋友选择过程,因此您更有可能看到某些朋友的分配(尽管当前的策略可能都是如此;我不是正面的)。无论如何,绝对最简单的策略不会让事情产生偏见,只是简单地抛弃网络并在遇到问题时重新开始。这是代码:
to setup-agent-friends
while [ any? turtles with [ count my-links != x ] ] [
clear-links
ask turtles [
let friends-needed x - count my-links
let turtles-needing-friends other turtles with [ count my-links < x ]
let available-turtles turtles-needing-friends with [ not member? self [ link-neighbors ] of myself ]
if count available-turtles >= friends-needed [
create-links-with n-of friends-needed available-turtles
]
]
]
end
您可以在此处详细了解此问题的通用版本:http://mathinsight.org/generating_networks_desired_degree_distribution