随机生成
语法
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
name | 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
源节点 | 目标节点 |
---|---|
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
name | nodes | relationships | relationshipDistribution |
---|---|---|---|
"weightedGraph" |
5 |
10 |
"UNIFORM" |
生成的图 weightedGraph
具有一个名为 score
的属性,该属性为每个关系包含 5.0 到 10.0 之间的随机值。我们可以使用 gds.graph.relationshipProperty.stream
来流式传输图的关系及其分数值。
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
源节点 | 目标节点 | 分数 |
---|---|---|
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
创建的,但它们的关系拓扑结构是等价的。