Raw File
graph_generator_v2.py
import networkx as nx
import random
import sys
import math
if len(sys.argv) < 8:
	print("usage: python3 graph_generator.py"
		+ "\n" +"levels node_size path_to_graph_file={/Users/abureyanahmed/Desktop/testenv/venv/Graph\ generator/name}"
		+ "\n" + "class_of_graph={0/watts_strogatz,1/erdos_renyi,2/preferential,3/geometric} param1 param2"
		+ "\n" + "node_distribution_in_levels={0/linear,1/exponential}"
		+ "\n" + "watts_strogatz:param1->neighbors,param2->probability"
		+ "\n" + "erdos_renyi:param1->probability"
		+ "\n" + "preferential:param1->neighbors"
		+ "\n" + "geometric:param1->Distance threshold value")
	print()
	quit()

#graph = nx.fast_gnp_random_graph(10,.2)
levels = int(sys.argv[1])
size = int(sys.argv[2])
param1 = float(sys.argv[5])
param2 = float(sys.argv[6])
node_distribution_in_levels = int(sys.argv[7])
nodes = size
avg_deg = 0
if size<10:
	avg_deg = 3
else:
	#avg_deg = 6
	avg_deg = param1
class_of_graph = int(sys.argv[4])
while True:
	if class_of_graph==0:
		#graph = nx.connected_watts_strogatz_graph(nodes,avg_deg,.2)
		graph = nx.connected_watts_strogatz_graph(nodes,int(avg_deg),param2)
	elif class_of_graph==1:
		graph = nx.generators.random_graphs.erdos_renyi_graph(nodes,param1)
	elif class_of_graph==2:
		graph = nx.generators.random_graphs.barabasi_albert_graph(nodes,int(param1))
	elif class_of_graph==3:
		graph = nx.generators.geometric.random_geometric_graph(nodes,param1)
	if nx.is_connected(graph):
		break
print("For steiner app:")
print(graph.number_of_edges())
# used below also, copy and replace print with write
if class_of_graph==3:
	pos=nx.get_node_attributes(graph,'pos')
edges = graph.edges()
edge_weights = []
j = 0
for e in edges:
	#edge_weights.append(random.randint(1,10))
	edge_weights.append(random.randint(1,100))
	print(str(e[0]+1)+" "+str(e[1]+1)+" "+str(edge_weights[j]))
	j = j+1
	#if class_of_graph!=3:
	#	print(str(e[0]+1)+" "+str(e[1]+1)+" "+str(random.randint(1,10)))
	#else:
	#	x1, y1 = pos[e[0]]
	#	x2, y2 = pos[e[1]]
	#	#print(str(e[0]+1)+" "+str(e[1]+1)+" "+str(math.pow((x1-x2)**2+(y1-y2)**2,.5)))
	#	print(str(e[0]+1)+" "+str(e[1]+1)+" 1")
print(str(levels))
for l in range(levels):
	if node_distribution_in_levels==0:
		if size<10:
			steiner_nodes = size-2
		else:
			steiner_nodes = int(nodes*(l+1)/(levels+1))
		steiner_nodes_str = ""
		for j in range(steiner_nodes-1):
			steiner_nodes_str = steiner_nodes_str + str(j+1) + " "
		steiner_nodes_str = steiner_nodes_str + str(steiner_nodes);
	elif node_distribution_in_levels==1:
		if size<10:
			steiner_nodes = size-2
		else:
			steiner_nodes = int(math.ceil(nodes*1.0/math.pow(2,levels-l)))
		steiner_nodes_str = ""
		for j in range(steiner_nodes-1):
			steiner_nodes_str = steiner_nodes_str + str(j+1) + " "
		steiner_nodes_str = steiner_nodes_str + str(steiner_nodes);
	print(steiner_nodes_str)
#print(stretch_factor)
file = open(sys.argv[3]+".txt","w")
file.write(str(graph.number_of_edges())+"\n");
if class_of_graph==3:
	pos=nx.get_node_attributes(graph,'pos')
edges = graph.edges()
j = 0
for e in edges:
	file.write(str(e[0]+1)+" "+str(e[1]+1)+" "+str(edge_weights[j])+"\n")
	j = j+1
	#if class_of_graph!=3:
	#	file.write(str(e[0]+1)+" "+str(e[1]+1)+" "+str(random.randint(1,10))+"\n")
	#else:
	#	x1, y1 = pos[e[0]]
	#	x2, y2 = pos[e[1]]
	#	#file.write(str(e[0]+1)+" "+str(e[1]+1)+" "+str(math.pow((x1-x2)**2+(y1-y2)**2,.5))+"\n")
	#	file.write(str(e[0]+1)+" "+str(e[1]+1)+" 1\n")
file.write(str(levels)+"\n")
for l in range(levels):
	if node_distribution_in_levels==0:
		if size<10:
			steiner_nodes = size-2
		else:
			steiner_nodes = int(nodes*(l+1)/(levels+1))
		steiner_nodes_str = ""
		for j in range(steiner_nodes-1):
			steiner_nodes_str = steiner_nodes_str + str(j+1) + " "
		steiner_nodes_str = steiner_nodes_str + str(steiner_nodes);
	elif node_distribution_in_levels==1:
		if size<10:
			steiner_nodes = size-2
		else:
			steiner_nodes = int(math.ceil(nodes*1.0/math.pow(2,levels-l)))
		steiner_nodes_str = ""
		for j in range(steiner_nodes-1):
			steiner_nodes_str = steiner_nodes_str + str(j+1) + " "
		steiner_nodes_str = steiner_nodes_str + str(steiner_nodes);
	file.write(steiner_nodes_str+"\n")
#file.write(stretch_factor+"\n")
file.close()
back to top