graphfragments.jl
Implementation of Graph Fragmentation in serial and in parallel.
Science Score: 44.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
○.zenodo.json file
-
✓DOI references
Found 3 DOI reference(s) in README -
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (7.0%) to scientific vocabulary
Repository
Implementation of Graph Fragmentation in serial and in parallel.
Basic Info
- Host: GitHub
- Owner: jcsyme
- License: mit
- Language: Julia
- Default Branch: main
- Size: 22.5 KB
Statistics
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
- Releases: 0
Metadata Files
README.md
GraphFragments.jl
Introduction
GraphFragments.jl implements the fragmentation metric introduced by Borgatti. The package includes standard implementation, distance-based fragmentation, and serial and distributed approaches.
Use
The fragmentation of the graph can be calculated using the fragmentation function. This function will automatically try to run in parallel if the keyword argument parallel_approach = true (default) is set; this can be fixed to run serially if desired or in parallel (if a script is setup to automatically run in parallel).
Fragmentation relies on the calculation of shortest paths across the graph from each starting node; if parallelized, the calculation will use synchronous data parallelization to distribute each source node on an available compute node. A dictionary of DistributedArrays.DArray objects for use by the distance algorithm can be passed using the dict_arrays argument, though the user should ensure these arrays match those necessary for the algorithm specificed by distance_algorithm. These arrays can include intermediate algorithmic vectors as well as any applicable heap cache arrays.
The user can access information about these arguments using the docstrings for fragmentation in Julia.
fragmentation(
graph::Union{AbstractGraph, Nothing},
dict_arrays::Union{Dict{Symbol, Vector}, Dict{Symbol, DArray}, Nothing} = nothing;
D_invs::Union{Matrix{Int64}, Matrix{Float64}, Nothing} = nothing,
distance_algorithm::Symbol = :auto,
parallel_approach::Symbol = :auto,
use_distance_weighting::Bool = true,
kwargs...
)
fragmentation(
adj::Union{SparseMatrixCSC{Float64, Int64}, Matrix{Float64}};
kwargs...
)
Data
The code only needs a Graph to work off of. This can be loaded in a Julia session using Graphs.jl. If using DiscreteGraphAlgorithms.jl, then the graph property of a GraphWrapper can be used.
Project information
The authors are grateful to RAND Center for Global Risk and Security Advisory Board members Michael Munemann and Paul Cronson for funding this project. All code was developed between April 2023 and October 2024.
References/Bibliography
Borgatti, Steve, The Key Player Problem (September 21, 2002). Available at SSRN: https://ssrn.com/abstract=1149843 or http://dx.doi.org/10.2139/ssrn.1149843
Copyright and License
Copyright (C) <2024> RAND Corporation. This code is made available under the MIT license.
Authors and Reference
James Syme, 2024.
@misc{GDA2024, author = {Syme, James}, title = {GraphFragments.jl: Distributed implementation of Key-Player Problem negative (KPP-Negative) metric.}, year = 2024, url = {URLHERE} }
Owner
- Login: jcsyme
- Kind: user
- Repositories: 3
- Profile: https://github.com/jcsyme
Citation (CITATION.cff)
cff-version: 1.2.0
title: GraphFragments.jl
message: Suggested Citation
type: software
authors:
- email: jsyme@rand.org
given-names: James
family-names: Syme
affiliation: RAND
repository-code: >-
MISSING
url: MISSING
abstract: >-
Implement the Distance-based Fragmentation for Key Player Problem Negative
(KPP-Neg) metrics from Borgatti (2006). Inlcudes serial and parallel
implementations, where the parallel implementation allows for distributed
computation of betweenness centralities across compute cores.
license: MIT
GitHub Events
Total
- Push event: 7
Last Year
- Push event: 7