This works builds on the Graphs.jl package for Julia.
For my dissertation, I studied Forman's discretisation of Ricci curvature. As a result, I have implemented algorithms for computing this measure in Julia.
During this work I also studied Forman's curvature on weighted graphs. The GraphIO package does not implement I/O for weighted graphs. Therefore, also included in this repository are methods for I/O of graphs with edge weights for the EdgeList format.
For graphs with edge weights, Forman's Ricci curvature is an edge based notion given by the following formula
where
for an edge
We define the curvature of a vertex
where the sum is taken over all edges adjacent to vertex
Functions implementing the above can be found in src/curvature.jl
The GraphIO package does not extend to weighted graphs. The Graphs.jl package has been extended to weighted graphs with the package SimpleWeightedGraphs. However, this package does not include I/O. As a result, to progress my project, I had to write functions for this.
These functions can be found in src/persistence.jl
For my project, I compared curvature to other network statistics. The source code for this work can be found in the demos
folder. There are three real world networks included:
Name | Number of vertices | Number of edges | Type |
---|---|---|---|
Astrophysics | 18 772 | 198 110 | Unweighted |
bio-WormNet-v3 | 16 347 | 762 822 | Weighted |
cond-mad-2003 | 30 460 | 120 029 | Weighted |
The scripts included will produce csv
files with statistics for all the nodes or edges in the graphs.
For performance, several algorithms allow for parallelism. To take advantage of this behaviour, Julia must be started with more than one thread.
To start Julia with n
threads:
$ julia --threads n