0

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

有没有一种简单的方法可以做到这一点,或者它基本上在计算上是不可能的?

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

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 没有创建最大集团的列表,而是创建图表上所有节点的列表。

有任何想法吗?

谢谢

4

1 回答 1

3

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

我认为您试图通过指定来表达的of turtles with [guild = g]内容类似于“仅考虑属于公会g的海龟”,但它对 NetLogo 的实际含义是“运行of作为每个海龟一部分的报告器公会g并从中列出清单”。(就像,例如,[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以拍摄一张新照片。这可能会在扩展的未来版本中发生变化。)

于 2013-02-10T16:10:52.447 回答