A Dynamic Graph Library
Politechnika Poznańska – April 24th 2018
Codes and Presentations are on GitHub
Many graph models consider dynamics in some ways. But they are usually bounded to their application domain.
Exploration: Analysis of “real world” networks (web graphs, biological networks, social networks)
Modelling: Build artificial networks (Barabasi-Albert, Watts-Strogatz, Dorogovtsev-Mendes, Golomb , etc.)
All the evolution is known in advance, the dynamic graph is aggregated into a static graph. (Temporal Networks, Evolving Graphs, Time-Varying Graphs, etc.)
Why? Because it allows the use of classical graph theory.
Build and maintain structures on dynamic graphs (e.g. spanning trees) without prior knowledge of the evolution.
Hypothesis: Updating an existing structure after some modifications is more effective that recomputing it from scratch.
Study interaction networks and their dynamics
A free and open-Source project supported by the University of Le Havre.
A Java library with a handy public API
Graph g = new SingleGraph("MyGraph");
g.read("some-file.tlp");
System.out.println("Average Degree: "+g.getDegree());
g.display();
Based on an event model: Nodes and Edges are Added/Removed/Modified
Interaction with over tools
org.graphstream
.graph
.stream
.ui
.algorithm
gs-core
, gs-algo
,gs-ui-swing
, gs-ui-javafx
, gs-ui-android
gs-netstream
, gs-boids
, gs-netlogo
, gs-geography
, …gs-core
, gs-algo
, gs-ui
gs-core
projectUse any version of GraphStream with jitpack.io
The dynamics of the graph is expressed by an event model
Events
A stream of events modifies the structure of a graph.
Produce streams of events.
Receive streams of events.
Both source and sink. A graph is a pipe.
Sources send events to sinks.
Sources, pipes and sinks can be connected to form pipelines.
The stream of events can flow between sources and sinks:
For example a viewer can run in a distinct thread or machine, while a simulation on a graph runs on another.
Receive events from another some other process/thread/programme/machine
Representation of a graph at a given time (static). But this representation can evolve.
random searches, shortest paths, spanning trees, etc.
modularity, centrality, degree distributions, connectivity, density, etc.
random, regular, preferential attachment, small world, from GIS, from the web, etc.
Some tutorials to go further
graph.setAttribute("stylesheet",
"graph {padding : 50px;}"
+ "node {size: 100px; fill-mode: image-scaled;}"
+ "node.fun {fill-image: url('fun.gif');}"
+ "node.dull {fill-image: url('dull.png');}");
Node a = graph.addNode("A");
Node b = graph.addNode("B");
Node c = graph.addNode("C");
graph.addEdge("AB", "A", "B");
graph.addEdge("CB", "C", "B");
graph.addEdge("AC", "A", "C");
a.setAttribute("ui.class", "fun");
b.setAttribute("ui.class", "fun");
c.setAttribute("ui.class", "dull");
Graphical objects that give extra information on the application you deal with.
Sprites are also customised with CSS
Tulip, Gephi, GML, Pajek, DOT, LGL, ncol, DGS