随机生成
语法
CALL gds.graph.generate(
graphName: String,
nodeCount: Integer,
averageDegree: Integer,
configuration: Map
})
YIELD name, nodes, relationships, generateMillis, relationshipSeed, averageDegree, relationshipDistribution, relationshipProperty
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
|
字符串 |
|
否 |
存储生成的图的名称。 |
|
整数 |
|
否 |
生成的节点数量。 |
|
整数 |
|
否 |
生成节点的平均出度。 |
|
映射 |
|
是 |
额外配置,见下文。 |
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
|
字符串 |
|
是 |
用于连接生成节点的概率分布方法。更多信息请参见关系分布。 |
|
整数 |
|
是 |
用于生成关系的种子。 |
|
映射 |
|
是 |
描述用于生成关系属性的方法。默认情况下不生成关系属性。更多信息请参见关系属性。 |
|
字符串 |
|
是 |
关系聚合方法参见关系投影。 |
|
字符串 |
|
是 |
边方向的方法。允许的值为 NATURAL、REVERSE 和 UNDIRECTED。 |
|
布尔值 |
|
是 |
是否允许源节点和目标节点相同的关系。 |
名称 | 类型 | 描述 |
---|---|---|
|
字符串 |
存储图的名称。 |
|
整数 |
图中的节点数量。 |
|
整数 |
图中的关系数量。 |
|
整数 |
生成图的毫秒数。 |
|
整数 |
用于生成关系的种子。 |
|
浮点数 |
生成节点的平均出度。 |
|
字符串 |
用于连接生成节点的概率分布方法。 |
|
字符串 |
生成的节点属性的配置。 |
关系分布
relationshipDistribution
参数控制用于生成新关系的统计方法。目前支持三种方法
-
UNIFORM
- 均匀分布出站关系,即每个节点具有完全相同的出度(等于平均度数)。目标节点是随机选择的。 -
RANDOM
- 使用正态分布分布出站关系,平均值为averageDegree
,标准差为2 * averageDegree
。目标节点是随机选择的。 -
POWER_LAW
- 使用幂律分布分布入站关系。出度基于正态分布。
关系属性
图生成器能够生成关系属性。这可以通过 relationshipProperty
参数控制,该参数接受以下参数
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
|
字符串 |
null |
否 |
存储属性值的名称。 |
|
字符串 |
null |
否 |
用于生成属性值的方法。 |
|
浮点数 |
0.0 |
是 |
生成属性的最小值(仅支持 |
|
浮点数 |
1.0 |
是 |
生成属性的最大值(仅支持 |
|
浮点数 |
null |
是 |
分配给每个关系的固定值(仅支持 |
目前,支持两种生成关系属性的方法
-
FIXED
- 为每个关系分配一个固定值。必须设置value
参数。 -
RANDOM
- 在下限 (min
) 和上限 (max
) 之间分配一个随机值。
关系种子
relationshipSeed
参数允许用户手动指定用于生成随机图的种子。指定后,无论生成的图是有权重的还是无权重的,过程都将在节点之间生成相同的关系。这有助于检查算法在权重条件下的行为或性能。
示例
以下所有示例都应在空数据库中运行。 |
下面我们将演示随机图生成过程的用法。
生成无权重图
CALL gds.graph.generate('graph',5,2, {relationshipSeed:19})
YIELD name, nodes, relationships, relationshipDistribution
名称 | nodes | relationships | relationshipDistribution |
---|---|---|---|
"graph" |
5 |
10 |
"UNIFORM" |
一个名为 graph
的新内存图,包含 5
个节点和 10
个关系,已创建并添加到图目录中。我们可以使用 gds.graph.relationships
过程检查其拓扑。
CALL gds.graph.relationships.stream('graph')
YIELD sourceNodeId,targetNodeId
RETURN sourceNodeId as source, targetNodeId as target
ORDER BY source ASC,target ASC
source | target |
---|---|
0 |
1 |
0 |
2 |
1 |
0 |
1 |
4 |
2 |
1 |
2 |
4 |
3 |
0 |
3 |
1 |
4 |
0 |
4 |
3 |
生成有权重图
要生成有权重关系的图,我们必须如上文所述指定 relationshipProperty
参数。
CALL gds.graph.generate('weightedGraph',5,2, {relationshipSeed:19,
relationshipProperty: {type: 'RANDOM', min: 5.0, max: 10.0, name: 'score'}})
YIELD name, nodes, relationships, relationshipDistribution
名称 | nodes | relationships | relationshipDistribution |
---|---|---|---|
"weightedGraph" |
5 |
10 |
"UNIFORM" |
生成的图 weightedGraph
具有一个名为 score
的属性,其中包含每个关系介于 5.0 和 10.0 之间的随机值。我们可以使用 gds.graph.relationshipProperty.stream
流式传输图的关系及其分数(score)值。
CALL gds.graph.relationshipProperty.stream('weightedGraph','score')
YIELD sourceNodeId, targetNodeId, propertyValue
RETURN sourceNodeId as source, targetNodeId as target, propertyValue as score
ORDER BY source ASC,target ASC, score
source | target | score |
---|---|---|
0 |
1 |
6.791408433596591 |
0 |
2 |
8.662453313014902 |
1 |
0 |
6.258381821615686 |
1 |
4 |
9.711806397654765 |
2 |
1 |
9.469695236791349 |
2 |
4 |
6.519823445755963 |
3 |
0 |
8.747179900968224 |
3 |
1 |
7.752117836610726 |
4 |
0 |
8.614858979680758 |
4 |
3 |
5.060444167785128 |
请注意,尽管 graph
和 weightedGraph
是用相同的 seed
创建的,但它们的关系拓扑是等效的。