文章目录
- 图数据的读写
- Graphs.loadgraph
- Graphs.loadgraphs
- Graphs.savegraph
- 保存单个图
- 保存图字典
- Graphs.loadlg_mult
- Graphs.savelg
- Graphs.savelg_mult
- 图的生成器
- 1. 随机图模型
- 1.1 Erdős–Rényi 模型
- 1.2 巴拉巴西-阿尔伯特模型 (无标度网络)
- 1.3 小世界网络模型
- 1.4 随机块模型 (SBM)
- 1.5 配置模型
- 1.6 静态适应度模型
- 2. 规则图与拓扑结构
- 2.1 完全图
- 2.2 路径与环
- 2.3 树结构
- 2.4 星形与轮形
- 2.5 网格与格子
- 2.6 特殊结构
- 3. 基于几何的图生成
- 3.1 欧几里得图
- 4. 其他随机图生成方法
- 4.1 正则图
- 4.2 锦标赛图
- 4.3 有向无环图 (DAG)
- 4.4 特殊算法
- 5. 预定义的特殊图
- 使用示例
图数据的读写
Graphs.loadgraph
loadgraph(file, gname="graph", format=LGFormat())
从 file
中读取以 format
格式命名的图,命名为 gname
。
实现说明:gname
与图格式相关,仅在文件包含多个图时使用。如果文件格式不支持多个图,则忽略此值。默认值将来可能会更改。
Graphs.loadgraphs
loadgraphs(file, format=LGFormat())
从 file
中以 format
格式加载多个图。返回一个将图名称映射到图的字典。
实现说明:对于未命名的图,将使用默认名称 “graph”。此默认值将来可能会更改。
Graphs.savegraph
保存单个图
savegraph(file, g, gname="graph", format=LGFormat())
将名为 gname
的图 g
以 format
格式保存到 file
。返回已写入的图的数量。
实现说明:分配的默认图名称 gname
将来可能会改变。
保存图字典
savegraph(file, d, format=LGFormat())
以 format
格式保存图字典 d
(格式为 graphname => graph
)到 file
。返回已写入的图的数量。
示例:
using Graphs
g1 = SimpleGraph(5,8)
g2 = SimpleGraph(7,10)
d = Dict("graph_1" => g1, "graph_2" => g2);
savegraph("myfile.txt", d, LGFormat())
实现说明:仅当文件格式支持多种图形类型时才有效。
Graphs.loadlg_mult
loadlg_mult(io)
从 IO 流 io
加载返回 (name=>graph)
字典。
Graphs.savelg
savelg(io, g, gname)
将以专有格式命名的图 g
(名称 gname
)写入指定的 IO 流 io
。返回 1(写入的图的数量)。
Graphs.savelg_mult
savelg_mult(io, graphs)
将 (name=>graph)
字典 graphs
写入 IO 流 io
,使用默认 GZip 压缩。返回已写入的图的数量。
图的生成器
下面将 Graphs.jl 中的图生成方法分为几个主要类别,并提供了每个方法的简要说明、参数和示例。
1. 随机图模型
1.1 Erdős–Rényi 模型
erdos_renyi(n, ne::Integer; is_directed=false, rng=nothing, seed=nothing)
erdos_renyi(n, p::Real; is_directed=false, rng=nothing, seed=nothing)
- 功能: 创建带有
n
个顶点和ne
条边或以概率p
连接顶点的随机图 - 参数:
n
: 顶点数ne
: 边数(第一种形式)p
: 连接概率(第二种形式)is_directed
: 是否生成有向图rng
: 随机数生成器seed
: 随机数种子
1.2 巴拉巴西-阿尔伯特模型 (无标度网络)
barabasi_albert(n::Integer, n0::Integer, k::Integer;
is_directed=false, complete=false, rng=nothing, seed=nothing)
barabasi_albert(n, k; is_directed=false, complete=false, rng=nothing, seed=nothing)
barabasi_albert!(g::AbstractGraph, n::Integer, k::Integer; rng=nothing, seed=nothing)
- 功能: 创建具有幂律度分布的无标度网络图
- 参数:
n
: 最终顶点数n0
: 初始顶点数k
: 每个新顶点连接的边数complete
: 初始图是否为完全图is_directed
: 是否生成有向图
1.3 小世界网络模型
watts_strogatz(n, k, β; remove_edges=true, is_directed=false, rng=nothing, seed=nothing)
newman_watts_strogatz(n, k, β; is_directed=false, rng=nothing, seed=nothing)
- 功能: 创建小世界网络图
- 参数:
n
: 顶点数k
: 每个顶点的初始邻居数β
: 边重连概率
1.4 随机块模型 (SBM)
stochastic_block_model(c, n; rng=nothing, seed=nothing)
stochastic_block_model(cint, cext, n; rng=nothing, seed=nothing)
- 功能: 根据随机块模型生成图,节点被分配到不同的块,块内和块间有不同的连接概率
1.5 配置模型
random_configuration_model(n, k; rng=nothing, seed=nothing, check_graphical=false)
- 功能: 根据给定的度序列创建随机图
- 参数:
k
: 每个节点的度组成的数组
1.6 静态适应度模型
static_fitness_model(m, fitness; rng=nothing, seed=nothing)
static_fitness_model(m, fitness_out, fitness_in; rng=nothing, seed=nothing)
- 功能: 根据适应度模型创建随机图,节点间的连接概率与适应度值的乘积成正比
2. 规则图与拓扑结构
2.1 完全图
complete_graph(n) # 无向完全图
complete_digraph(n) # 有向完全图
complete_bipartite_graph(n1, n2) # 完全二分图
complete_multipartite_graph(partitions) # 完全多部图
2.2 路径与环
path_graph(n) # 路径图
path_digraph(n) # 有向路径图
cycle_graph(n) # 环图
cycle_digraph(n) # 有向环图
2.3 树结构
binary_tree(k) # 二叉树
double_binary_tree(k) # 双二叉树
uniform_tree(n; rng=nothing, seed=nothing) # 均匀随机树
2.4 星形与轮形
star_graph(n) # 星形图
star_digraph(n) # 有向星形图
wheel_graph(n) # 轮形图
wheel_digraph(n) # 有向轮形图
2.5 网格与格子
grid(dims; periodic=false) # 网格图
circular_ladder_graph(n) # 循环梯形图
ladder_graph(n) # 梯形图
2.6 特殊结构
barbell_graph(n1, n2) # 杠铃图
lollipop_graph(n1, n2) # 棒棒糖图
clique_graph(k, n) # 团图
turan_graph(n, r) # Turán图
roach_graph(k) # Roach图
3. 基于几何的图生成
3.1 欧几里得图
euclidean_graph(N, d; rng=nothing, seed=nothing, L=1., p=2., cutoff=-1., bc=:open)
euclidean_graph(points; L=1, p=2, bc=:open)
- 功能: 生成欧几里得空间中的随机几何图
- 参数:
N
: 点数d
: 维度L
: 空间范围 [0, L]^dp
: 距离度量参数 (p=2 为欧氏距离)cutoff
: 连接距离阈值bc
: 边界条件 (:open
或:periodic
)
4. 其他随机图生成方法
4.1 正则图
random_regular_graph(n, k; rng=nothing, seed=nothing) # 无向正则图
random_regular_digraph(n, k; dir=:out, rng=nothing, seed=nothing) # 有向正则图
4.2 锦标赛图
random_tournament_digraph(n; rng=nothing, seed=nothing) # 有向锦标赛图
4.3 有向无环图 (DAG)
random_orientation_dag(g; rng=nothing, seed=nothing) # 随机有向无环图
4.4 特殊算法
dorogovtsev_mendes(n; rng=nothing, seed=nothing) # Dorogovtsev-Mendes 生成器
expected_degree_graph(ω; rng=nothing, seed=nothing) # 期望度图
static_scale_free(n, m, α; rng=nothing, seed=nothing, finite_size_correction=true) # 静态无标度图
5. 预定义的特殊图
smallgraph(s) # 创建预定义的小图
支持的小图包括::bull
, :chvatal
, :cube
, :desargues
, :diamond
, :dodecahedron
, :frucht
, :heawood
, :house
, :housex
, :icosahedron
, :karate
, :krackhardtkite
, :moebiuskantor
, :octahedron
, :pappus
, :petersen
, :sedgewickmaze
, :tetrahedron
, :truncatedcube
, :truncatedtetrahedron
, :truncatedtetrahedron_dir
, :tutte
等。
使用示例
using Graphs
# 创建一个 Erdős–Rényi 随机图
g1 = erdos_renyi(10, 0.3)
# 创建一个巴拉巴西-阿尔伯特无标度网络
g2 = barabasi_albert(50, 3)
# 创建一个小世界网络
g3 = watts_strogatz(20, 4, 0.2)
# 创建一个随机几何图
g4, dists = euclidean_graph(30, 2, cutoff=0.4)
# 创建一个完全图
g5 = complete_graph(8)
# 创建一个路径图
g6 = path_graph(6)
# 使用预定义的特殊图
g7 = smallgraph(:petersen)
这些方法涵盖了从经典随机图模型到规则图、从几何图到特殊拓扑结构的多种图生成方式,可以满足不同场景下的图生成需求。