-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexplore_demand.py
More file actions
98 lines (78 loc) · 3.18 KB
/
explore_demand.py
File metadata and controls
98 lines (78 loc) · 3.18 KB
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
93
94
95
96
97
98
import csv
import random
import matplotlib.pyplot as plt
# file_list = ['./filtered_sum_Facebook.csv', './36_99_filtered_sum_Facebook.csv', './filtered_sum_Microsoft.csv',
# './36_99_filtered_sum_Microsoft.csv', './filtered_sum_pFabric.csv', './filtered_sum_ProjecToR.csv']
# label_list = ['Facebook1', 'Facebook2', 'Microsoft1', 'Microsoft2', 'pFabric', 'ProjecToR']
# cluster = 'C'
# sample_range = range(1, 5)
# directory = f'./main datasets/Facebook/10_min_samples_cluster{cluster}/'
# file_list = []
# label_list = []
# for sample in sample_range:
# file_list.append(f'{directory}1024_filtered_{cluster}{sample}')
# label_list.append(f'Facebook Cluster{cluster} {sample}')
# n_nodes = 1024
n_nodes = 64
file = './test'
label = 'Artificial demand like Facebook Cluster A'
def get_random_assignment():
mapping = {} # key: node in dataset, value: assigned id
random_id_assignment = list(range(n_nodes))
random.shuffle(random_id_assignment)
for i in range(n_nodes):
mapping[random_id_assignment[i]] = i
return mapping
def get_flow(file_path):
inflow_dict = dict()
outflow_dict = dict()
neighbors_dict = dict()
mapping = get_random_assignment()
with open(f'{file_path}.csv', 'r') as file:
f = csv.reader(file)
next(f)
for row in f:
src = mapping[int(row[0])]
dst = mapping[int(row[1])]
packet_size = int(row[2])
inflow_dict.setdefault(dst, 0)
inflow_dict[dst] += packet_size
outflow_dict.setdefault(src, 0)
outflow_dict[src] -= packet_size
neighbors_dict.setdefault(src, set())
neighbors_dict[src].add(dst)
return inflow_dict, outflow_dict, neighbors_dict
fig, ax = plt.subplots()
x = list(range(n_nodes))
inflow_dict, outflow_dict, neighbors_dict = get_flow(file)
inflow = [inflow_dict.get(i, 0) for i in range(n_nodes)]
outflow = [outflow_dict.get(i, 0) for i in range(n_nodes)]
degree = [len(neighbors_dict.get(i, set())) for i in range(n_nodes)]
print(degree)
ax.bar(x, inflow, label='inflow')
ax.bar(x, outflow, label='outflow')
ax.plot(x, degree, label='degree', color='green', linewidth=3)
ax.legend(fontsize=12)
ax.set_xlabel(label, fontsize=16)
# # fig, axes = plt.subplots(3, 2, figsize=(20, 24))
# fig, axes = plt.subplots(2, 2, figsize=(10, 8))
# axes_list = []
# for i in range(axes.shape[0]):
# for j in range(axes.shape[1]):
# axes_list.append(axes[i, j])
# x = list(range(n_nodes))
# index = 0
# for ax in axes_list:
# inflow_dict, outflow_dict, neighbors_dict = get_flow(file_list[index])
# inflow = [inflow_dict.get(i, 0) for i in range(n_nodes)]
# outflow = [outflow_dict.get(i, 0) for i in range(n_nodes)]
# degree = [len(neighbors_dict.get(i, set())) for i in range(n_nodes)]
# ax.bar(x, inflow, label='inflow')
# ax.bar(x, outflow, label='outflow')
# ax.plot(x, degree, label='degree', color='green', linewidth=3)
# ax.legend(fontsize=12)
# ax.set_xlabel(label_list[index], fontsize=16)
# index += 1
# plt.savefig(f'../Figures/demand_data_Facebook_{cluster}.pdf')
# plt.savefig(f'../Figures/test/A_like_inflow4h4m_outflow100fifteen_smallLow.pdf')
plt.show()