graphfragments.jl

A Julia package for calculating graph fragmentation metrics, including parallelized implementations, to evaluate the impact of node removal on network connectivity.

https://github.com/randcorporation/graphfragments.jl

Science Score: 57.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
    Found .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 (12.5%) to scientific vocabulary
Last synced: 7 months ago · JSON representation ·

Repository

A Julia package for calculating graph fragmentation metrics, including parallelized implementations, to evaluate the impact of node removal on network connectivity.

Basic Info
  • Host: GitHub
  • Owner: RANDCorporation
  • License: mit
  • Language: Julia
  • Default Branch: main
  • Homepage:
  • Size: 15.6 KB
Statistics
  • Stars: 0
  • Watchers: 2
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Created 11 months ago · Last pushed 11 months ago
Metadata Files
Readme License Citation

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.

Installation Notes

GraphFragments.jl depends on the following packages from the RAND repository, which must be added in the following order:

Pkg.add(url = "https://github.com/RANDCorporation/IterativeHeaps.jl") Pkg.add(url = "https://github.com/RANDCorporation/GraphDistanceAlgorithms.jl")

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

This package is one of five created during the research phase of a RAND project.

In their report North Korea's Black Knights and Dark Network: Towards the Disruption and Typology of DPRK Sanctions Evasion Networks (RAND, RR-A3413-1) researchers describe how they created a network representation of the DPRK sanctions-evasion system, comprising over 4,100 nodes and 6,500 links derived from UN Panel of Experts reports and the Center for Advanced Defense Studies (C4ADS) dataset. Together, the five code packages supported the team's ability to rank nodes and links, calculate priority scores, and compare the results to sanctioned entities, thus offering a rigorous, computationally driven approach to network disruption and target prioritization.

See the parent repository for a full list and additional details.

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) <2025> RAND Corporation. This code is made available under the MIT license.

Authors and Reference

James Syme, 2025.

``` @misc{GF2025, author = {Syme, James}, title = {GraphFragments.jl: Distributed implementation of Key-Player Problem negative (KPP-Negative) metric.}, year = 2025, url = {https://github.com/RANDCorporation/GraphFragments.jl} }

Owner

  • Name: The RAND Corporation
  • Login: RANDCorporation
  • Kind: organization

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: "https://github.com/RANDCorporation/GraphFragments.jl"
url: "https://github.com/RANDCorporation/black-knights-and-dark-network"
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: 1
  • Public event: 1
Last Year
  • Push event: 1
  • Public event: 1