Source code for algorithms.newman_model
"""
Newman Model
-----------------------
This module contains a functions for generating random graph
using configuration model. In configuration model, one represents
a graph using degree sequence. The actual graph is obtained by randomly
connecting stubs of vertices.
"""
import sys, os, math
import numpy as np
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
[docs]def degree_sequence_regular(n, k):
"""
Generates a degree sequnce following k-regular distribution
:param n: Number of vertices.
:param k: The parameter k for k-regular distribution
:return: A list containing n integers representing degrees of vertices following k-regular distribution.
"""
return [k] * n
[docs]def degree_sequence_lognormal(n, mu, sigma):
"""
Generates a degree sequnce following k-regular distribution
:param n: Number of vertices.
:param mu: The parameter mu for lognormal distribution
:param sigma: The parameter sigma for lognormal distribution
:return: A list containing n integers representing degrees of vertices following lognormal distribution
"""
degree_seq = np.random.normal(mu, sigma, size=n)
return degree_seq
[docs]def irregular_edge_count(edges):
"""
Computes ratio of multiedges and loops and simple edges
:param edges: A list of tuples representing the set of edges of a graph.
:return: The ratio described above.
"""
unique_edges = set()
loop_counter, multi_edge_cnt = 0, 0
for e in edges:
u, v = e
# check if it is a loop
if u == v: loop_counter += 1
# check if it is multiedge
if (u, v) in unique_edges or (v, u) in unique_edges: multi_edge_cnt += 1
else: unique_edges.add(e)
return float(loop_counter + multi_edge_cnt) / float(len(edges))