in utils.py [0:0]
def generate_graph(n, d=None, p=None, graph_type='reg', random_seed=0):
"""
Helper function to generate a NetworkX random graph of specified type,
given specified parameters (e.g. d-regular, d=3). Must provide one of
d or p, d with graph_type='reg', and p with graph_type in ['prob', 'erdos'].
Input:
n: Problem size
d: [Optional] Degree of each node in graph
p: [Optional] Probability of edge between two nodes
graph_type: Specifies graph type to generate
random_seed: Seed value for random generator
Output:
nx_graph: NetworkX OrderedGraph of specified type and parameters
"""
if graph_type == 'reg':
print(f'Generating d-regular graph with n={n}, d={d}, seed={random_seed}')
nx_temp = nx.random_regular_graph(d=d, n=n, seed=random_seed)
elif graph_type == 'prob':
print(f'Generating p-probabilistic graph with n={n}, p={p}, seed={random_seed}')
nx_temp = nx.fast_gnp_random_graph(n, p, seed=random_seed)
elif graph_type == 'erdos':
print(f'Generating erdos-renyi graph with n={n}, p={p}, seed={random_seed}')
nx_temp = nx.erdos_renyi_graph(n, p, seed=random_seed)
else:
raise NotImplementedError(f'!! Graph type {graph_type} not handled !!')
# Networkx does not enforce node order by default
nx_temp = nx.relabel.convert_node_labels_to_integers(nx_temp)
# Need to pull nx graph into OrderedGraph so training will work properly
nx_graph = nx.OrderedGraph()
nx_graph.add_nodes_from(sorted(nx_temp.nodes()))
nx_graph.add_edges_from(nx_temp.edges)
return nx_graph