gpt4 book ai didi

netlogo - 以对称方式将邻居分配给代理

转载 作者:行者123 更新时间:2023-12-02 01:46:35 24 4
gpt4 key购买 nike

我的海龟拥有一个名为 friends 的列表作为变量之一。现在,我想为每只乌龟随机分配 $x$ 个 friend 。但是我面临的问题如下

如果 $a$ 是 $b$ 的 friend ,那么 $b$ 将自动成为 $a$ 的 friend 。但我做不到。有人可以帮我创建一个 friend 列表吗?

以下是我试过的方法。

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

如何去除列表中的重复好友?如何保持 friend 的对称性,即如果 x 是 y 的 friend ,则 y 是 x 的 friend 。

注意:每个代理将恰好有 $x$ 个邻居。

谢谢

最佳答案

在这种情况下,链接似乎比列表更适合您。如果你这样做

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由于链接的对称性,friends 有点棘手:当一只乌龟试图交 friend 时,他们可能已经和一些乌龟成为 friend ,他们不应该尝试与任何已经有足够 friend 的乌龟交 friend 。

let friends-needed x - count my-links弄清楚他们需要多少 friend 。

let turtles-needing-friends other turtles with [ count my-links < x ]得到所有其他仍然可以有新 friend 的海龟。

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 ]隐藏它们。

更新

正如评论中所指出的,有时这段代码会抛出运行时错误,一些海龟最终会得到少于正确数量的 friend 。这就是我在发布代码之前没有测试代码的结果……也就是说,这是一个有趣的问题。

假设我们有 100 只乌龟,并且希望每只乌龟正好有 2 个 friend 。在为前 99 只海龟分配 friend 时,有可能它们都不会连接到第 100 只。因此,第 100 只乌龟需要两个 friend ,但所有其他乌龟都已经拥有了他们需要的所有 friend 。或者,前 98 只海龟可能根本不连接到最后 2 只海龟。然后,最后 2 个将相互连接,但每个都需要另外 1 个 friend 。想要的 friend 数量越多,这种情况就越有可能发生。

事实证明,解决这个问题其实很棘手。问题在于,最简单的解决方案会使 friend 选择过程产生偏差,因此您更有可能看到某些 friend 分配(尽管当前策略无论如何都可能如此;我并不乐观)。无论如何,最简单的不会产生偏差的策略就是简单地折腾网络并在遇到问题时重新开始。这是相关代码:

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

关于netlogo - 以对称方式将邻居分配给代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25332514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com