graph - 如何在 LightGraphs (Julia) 中向图形添加自由边?

标签 graph julia lightgraphs

我正在向 Julia 中的简单加权有向图添加边(来自 SimpleWeightedDiGraph(),它是 LightGraphs 包的一部分)。一些弧是“自由的”(零权重)。但是,当指定权重 0 时,它不会作为新边添加,并且最短路径问题不会将其包含在可能的解决方案中。有没有一种简单的方法可以在 Julia 中向图形添加“自由”边/弧?

最佳答案

关键问题是如何在稀疏矩阵(这是 SimpleWeightedGraph 的底层数据存储)中表示零值。虽然底层零值在显式设置后确实会被保留:

julia> g = SimpleWeightedGraph(6)
{6, 0} undirected simple Int64 graph with Float64 weights

julia> add_edge!(g, 1, 2, 1.0)
true

julia> add_edge!(g, 1, 3, 1.0)
true

julia> add_edge!(g, 1, 3, 0.0)
true

julia> weights(g)
6×6 SparseMatrixCSC{Float64,Int64} with 4 stored entries:
  [2, 1]  =  1.0
  [3, 1]  =  0.0
  [1, 2]  =  1.0
  [1, 3]  =  0.0

如果你必须对边缘做任何事情,这将会失败:

julia> collect(edges(g))
1-element Array{SimpleWeightedGraphs.SimpleWeightedEdge{Int64,Float64},1}:
 Edge 1 => 2 with weight 1.0

对此没有真正好的解决方案。我的建议是使用上面建议的足够小的权重来近似零值。

(PS:初始 add_edge!(g, 1, 3, 0.0) 不起作用的原因是在 Julia 中,将新稀疏矩阵元素的值设置为零是不行的- 操作。)

关于graph - 如何在 LightGraphs (Julia) 中向图形添加自由边?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48977068/

相关文章:

graph - GNUPlot:如何设置 x 刻度的最大数量

julia - 如何不在 Julia 的内部 block 中隐藏变量?

android - SciChart Android 实时绘图 : How to maximize graphing speed?

python - 缩放与邻接矩阵成比例的 NetworkX 节点和边

http - 为什么本地主机上的 Julia 服务器挂起?

julia - 如何确定 julia 脚本是作为模块包含还是作为脚本运行?

julia - 在 Julia 中导入图形(网络)

julia - 如何删除 Lightgraphs 中的自循环

io - 元图加载和保存

database - 如何在动态图形/图表上显示数据库数据