forked from Berkeley-CS170/project-fa19
-
Notifications
You must be signed in to change notification settings - Fork 1
/
generate_inputs.py
92 lines (86 loc) · 2.86 KB
/
generate_inputs.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import numpy as np
from faker import Faker
from collections import deque
fake = Faker()
num_locations = 200
num_homes = 100
locations = {}
homes = {}
root_name = ""
matrix = [['x' for _ in range(num_locations)] for i in range(num_locations)]
def generate_locations_and_homes():
countries = []
for i in range(num_locations):
bool = False
while not bool:
country = fake.city()
if (" " not in country) and (country not in countries) and (len(country) <= 20):
countries.append(country)
locations[i] = country
bool = True
chosen_numbers = []
for i in range(num_homes):
bool = False
while not bool:
number = np.random.randint(0, num_locations)
if number not in chosen_numbers:
chosen_numbers.append(number)
homes[number] = locations[number]
bool = True
generate_locations_and_homes()
def generate_input():
#Step 1: Pick root
current_locations = list(locations.keys())
current_homes = list(homes.keys())
not_homes = [item for item in current_locations if item not in current_homes]
root_index = np.random.randint(len(not_homes))
root = not_homes[root_index]
root_name = locations[root]
print(root_name)
not_homes.remove(root)
#Append and pop left
queue = deque()
queue.append(root)
while not_homes:
parent = queue.popleft()
branching_factor = np.random.randint(2,4)
for i in range(branching_factor):
if not not_homes:
break
child = np.random.randint(len(not_homes))
child = not_homes[child]
not_homes.remove(child)
edge_length = round(np.random.uniform(1000000000, 2000000000), 5)
matrix[parent][child] = edge_length
matrix[child][parent] = edge_length
queue.append(child)
while current_homes:
parent = queue.popleft()
branching_factor = np.random.randint(0,3)
for i in range(branching_factor):
if not current_homes:
break
child = np.random.randint(len(current_homes))
child = current_homes[child]
current_homes.remove(child)
edge_length = round(np.random.uniform(1000000000, 2000000000), 5)
matrix[parent][child] = edge_length
matrix[child][parent] = edge_length
queue.append(child)
def print_matrix():
for i in range(num_locations):
for j in range(num_locations):
print(matrix[i][j],end =" ")
print()
def print_list(lst):
for i in range(len(lst)):
print(lst[i], end=" ")
print()
def printer():
print(num_locations)
print(num_homes)
print_list(list(locations.values()))
print_list(list(homes.values()))
print_matrix()
generate_input()
printer()