To take my mind off my meetings, I spent a little time modifying the Spatial Preferred Attachment model from Aiello, Bonato, Cooper, Janssen, and Prałat’s paper A Spatial Web Graph Model with Local Influence Regions so that it changes over time.
NetworkX makes this kind of messing around pretty easy, and I find the random functions in PyMC are handy, too. Here’s what it takes to generate one of their graphs:
def make_graph(n, d, p, A1, A2, A3): position = runiform(0, 1, size=(n, d)) affinity = runiform(0, 1, size=(n,n)) G = DiGraph() G.add_nodes_from(range(n)) for t in range(1, n): for s in range(t): if distance(position[s], position[t]) \ <= (A1 * G.in_degree(s) + A2) / (t + A3): if affinity[t, s] <= p: G.add_edge(t, s) return G
Here is how I animated it.