Skip to content
Snippets Groups Projects
generate_theoric_random_graph.py 2.1 KiB
Newer Older
# coding = utf-8
Fize Jacques's avatar
Fize Jacques committed
import itertools

import networkx as nx
import argparse
import numpy as np
import pandas as pd
import random
import copy
from tqdm import tqdm
Fize Jacques's avatar
Fize Jacques committed
import lib.random as ra
# COMMAND PARSING
parser = argparse.ArgumentParser()
parser.add_argument("output_dir")
args = parser.parse_args()

Fize Jacques's avatar
Fize Jacques committed
GRAPH_SIZE = [80,800,5000]
EDGE_SIZE = [2,4,5,10]
Fize Jacques's avatar
Fize Jacques committed

OUTPUT_DIR = args.output_dir
Fize Jacques's avatar
Fize Jacques committed
if not os.path.exists(OUTPUT_DIR):
    os.makedirs(args.output_dir)
Fize Jacques's avatar
Fize Jacques committed

parameters = {
Fize Jacques's avatar
Fize Jacques committed
    "stochastic_block_model_graph": {
        "nb_nodes":GRAPH_SIZE,
        "nb_edges":EDGE_SIZE,
        "nb_com" :[2,5,8,16,10,25],
        "percentage_edge_betw":[0.1,0.01]
    },
    "ER_graph": {
        "nb_nodes":GRAPH_SIZE,
        "nb_edges":EDGE_SIZE
    },
    "powerlaw_graph": {  # configuration_model
        "nb_nodes":GRAPH_SIZE,
        "nb_edges":EDGE_SIZE,
        "exponent":[2,3],
        "tries":[100]
    },
    "spatial_graph":{
        "nb_nodes":GRAPH_SIZE,
        "nb_edges":EDGE_SIZE,
        "coords":["random","country"],
    },
Fize Jacques's avatar
Fize Jacques committed
    "mixed_model_spat_sbm":{
        "nb_nodes":GRAPH_SIZE,
        "nb_edges":EDGE_SIZE,
Fize Jacques's avatar
Fize Jacques committed
        "nb_com":[2,4,8,16],
        "alpha":[0,0.01,0.1,0.5,0.7,1]

Fize Jacques's avatar
Fize Jacques committed
    }
Fize Jacques's avatar
Fize Jacques committed
def get_params(inp):
    return (dict(zip(inp.keys(), values)) for values in itertools.product(*inp.values()))

pbar = tqdm(parameters.items(),total=len(parameters))
for method,args in pbar:
    pbar.set_description("Generating graphs using : " + method)
    list_of_params = get_params(parameters[method])
Fize Jacques's avatar
Fize Jacques committed
    func = getattr(ra,method)
    for ix,params in enumerate(list_of_params):
        params["nb_edges"] = params["nb_edges"] * params["nb_nodes"]
        print("Gen graph using the following parameters : ",params)
        for sp_id in range(sample_per_params):
            try:
                G = func(**params)
                G.graph.update(params)
                nx.write_gml(G, OUTPUT_DIR+"/graph_{method}_{ix}_{sp_id}.gml".format(method=method,ix=ix,sp_id=sp_id),stringizer=str)
            except Exception as e:
                print(e)
                print("Can't generate graphs using these parameters")