在Netlogo上的图形中提取子图(cliques)

时间:2013-02-09 21:08:40

标签: networking netlogo subgraph clique

我有一个netlogo问题。我有一些与(无向)链接相连的节点图结构。我需要弄清楚哪个是这些结构中最小的子图。基本上子图意味着哪些节点彼此连接。所以,如果我有一个5节点的结构,节点1连接到2和3;节点2到3,1和4;节点3到1,2和5我需要检测节点1,2和3的子图,因为它们都是互连的。

有一种简单的方法可以做到这一点,还是基本上没有计算机可行?

编辑:我发现如果我使用netlogo扩展名nw,我可以使用nw:maximal-cliques方法来计算我想要的内容。虽然现在我有另一个问题。我正试图以这种方式填写一份clique列表

let lista-cliques [nw:maximal-cliques] of turtles with [guild = g]

lista-cliques的长度通常为2,但第一个应该是clique列表的元素就是这样的列表

[[[nobody] [nobody] [nobody] [nobody]...etc
当具有guild = g的海龟制作的图表长度为2-8只时,长度为300的

。是否调用了nw:maximal-cliques?

关于我做错什么的任何想法?

编辑2:我想通过这样做来确定如何修复列表的长度

let lista-cliques (list ([nw:maximal-cliques] of turtles with [guild = g]))

现在列表不是300个节点,而是等于图表上节点数量为guild = g的节点数量。

这意味着

length item 1 lista-cliques

等于

count turtles with [guild = g]

这也显然是错误的,因为我可以看到节点只连接到一个或两个节点的图形。我想我越来越近但我不知道为什么nw:maximal-cliques没有创建最大派系列表,而是创建图表上所有节点的列表。

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:3)

您对nw:maximal-cliques的使用不太正确。

我认为您通过指定of turtles with [guild = g]来表达的内容类似于“只考虑作为公会 g 的一部分的海龟”,但它实际上意味着什么NetLogo“为那些属于公会 g 的每只乌龟运行of之前的记者,并列出”。 (就像,例如,[color] of turtles将为每只乌龟运行[color]报告块一次,并根据结果构建颜色列表。)

nw:maximal-cliques是一个在整个网络上运行的原语,因此您不希望为每个乌龟运行一次。就像nw扩展中的大多数原语一样,您需要使用nw:set-snapshot原语告诉它要操作哪些海龟和链接。

我认为你可以通过简单的方式实现你想要的目标:

nw:set-snapshot (turtles with [guild = g]) links
let lista-cliques nw:maximal-cliques

(请注意,nw:set-snapshot会获取网络的静态“图片”,进一步调用nw原语。如果您的网络发生变化,则需要致电nw:set-snapshot拍摄新照片。这可能会在未来版本的扩展中发生变化。)