图生成过程用来生成不同类型的随机图,以用作算法研究、性能测试等目的。APOC提供下列随机图生成过程。
| 过程 | 说明 |
| apoc.generate.er(noNodes, noEdges, 'label', 'type') | 根据Erdős–Rényi模型[1](ER)生成图(随机网络)。 |
| apoc.generate.ws(noNodes, degree, beta, 'label', 'type') | 根据Watts-Strogatz模型(WS)[2]生成图表(小世界网络)。 |
| apoc.generate.ba(noNodes, edgesPerNode, 'label', 'type') | 根据Barabasi-Albert模型(无标度网络)[3]、遵从优先依附规律生成图。 |
| apoc.generate.complete(noNodes, 'label', 'type') | 生成完全图,每个节点都连接到所有其他节点。 |
| apoc.generate.simple([degrees], 'label', 'type') | 生成具有给定度数分布的图,基于一种序列化、按照节点重要程度进行采样的算法[4]。 |
[1] http://wiki.swarma.net/index.php?title=ER随机图模&variant=zh
[2] http://wiki.swarma.net/index.php?title=WS小世界模型&variant=zh
[3] http://wiki.swarma.net/index.php?title=无标度网络&variant=zh
[4] http://www.people.fas.harvard.edu/~blitz/BlitzsteinDiaconisGraphAlgorithm.pdf
2、过程概述 – apoc.generate.er
在图论中,ER随机图模型(Erdős–Rényi model)可以是两个密切相关的随机图生成模型中的任意一个。ER随机图模型的名字源于最早提出上述模型之一的数学家Paul Erdős(保尔•厄多斯)和Alfréd Rényi(阿尔弗烈德•瑞利),他们在1959年首次提出了其中一个模型;而几乎在同时期,Edgar Gilbert(埃德加•吉尔伯特)独立提出了另外一个模型。在Erdős和Rényi的模型中,节点集一定、连边数也一定的所有图的形成是等概率的;在Gilbert的模型中,每个连边存在与否有着固定的概率,与其他连边无关。在概率方法中,这两种模型可用来证明满足各种性质的图的存在,也可为几乎所有图的性质提供严格的定义。
ER图拥有以下特征:
- 基于两个主要假设:a. 连边独立,b. 每条连边存在的概率相同;ER图的生成过程实际上就是从完全图上随机移除边/关系的过程;ER图中节点的度/边的数量服从二项分布;ER图并不适用于现实生活中的现象,因为它没有“长尾”(不服从幂律分布[1]),而许多实际网络(例如社交网络)的分布是长尾的。此外,与许多社交网络不同,ER图集聚系数[2]较低。
[1] https://baike.baidu.com/item/%E5%B9%82%E5%BE%8B
[2] https://baike.baidu.com/item/%E8%81%9A%E9%9B%86%E7%B3%BB%E6%95%B0
[3] Simmel, G. (1950). The sociology of georg simmel, volume 92892. Simon and Schuster.
3、过程调用接口 – apoc.generate.er
CALL apoc.generate.er(
noNodes,
noEdges,
label,
relType
)
| 参数名 | 类型 | 缺省值 | 可为空? | 说明 |
| noNodes | 非负长整数 | 1000 | 是 | 随机生成的节点总数。 |
| noEdges | 非负长整数 | 10000 | 是 | 随机生成的边/关系总数。 |
| label | 字符串 | NULL | 是 | 节点标签。如果为空则缺省为Person,并且会为每个Person节点生成一个英文名字保存在name属性中。 |
| relType | 字符串 | NULL | 是 | 关系类型。如果为空则缺省为FRIENDS_OF。 |
// 8.5(1) 生成一个有10万节点、30万条边的ER图。 // 节点标签为Node,边/关系类型为linkS。 // 执行时间:2166ms CALL apoc.generate.er(100000,300000,'Node', 'linkS') // 8.5(2) 统计生成的图中、节点度的分布。 MATCH (u:Node) WITH size ((u) -- ()) AS countOfRels WITH countOfRels, count(countOfRels) AS cnt RETURN countOfRels, cnt ORDER BY countOfRels ASC
如果将查询8.5(2)的结果导出到CSV,然后以图表形式展现,会得到下面的结果:
图 ER生成图中节点的度数分布
---- 未完待续 ---



