【图论】Graphs.jl 图数据的读写与生成器

文章目录

  • 图数据的读写
    • 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 的图 gformat 格式保存到 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]^d
    • p: 距离度量参数 (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)

这些方法涵盖了从经典随机图模型到规则图、从几何图到特殊拓扑结构的多种图生成方式,可以满足不同场景下的图生成需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BlackPercy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值