How one should create an Erdos-Renyi random graph with graph_tool? Equivalently, a “G_n_p" graph?
I think, one could create a graph with -n- vertices and n*p edges and
then use the random_rewire function with model=‘erdos’.
This would work. This is exactly what you would get if you did:
g = random_graph(n, lambda: poisson((n-1) * p), directed=False, model="erdos")
Note that if you remove "model='erdos'" from the above you will get an
almost indistinguishable graph, i.e. a sample from the configuration
model with a Poisson degree distribution.
(Note that your graph will have on average n(n-1)p/2 edges, not n * p)
Q1. Can I create the input graph of the random_rewire
/deterministically/ and rely on the random_rewire to actually do the
Q2. “Turning on” the edge_sweep option and the niter is it crucial for
the graph’s randomness?
The only important thing is that niter is sufficiently large. The
edge_sweep option only makes things faster, since it attempts to rewire
each edge in a random sequence, whereas if it is disabled, each edge to
be sampled is chosen randomly, and it may take a longer time for a
given edge to be chosen.
And a small suggestion: given the popularity of this type of model, it
might worth an *example *at the documentation, to “attract” more
I agree. I'll make sure to include simpler examples in this part of the
documentation in the future. If you want to help, you could open a
ticket about this in the website, so I can keep track of it.
Small side-question: what is the* fastest* way to create a graph
object with n vertices and m edges (any edges other than parallel and
self-loops are allowed).
Should it be random? If not, you can do:
ak = floor(2 * m / n)
dm = 2 * m - ak * n
g = random_graph(N, lambda i: ak + 1 if i < dm else ak, directed=False, random=False)
This is a bit cumbersome, but should be fast. I think it would be a
good idea to include this simple case in the library in some form...