Created
June 14, 2018 08:38
-
-
Save luelista/f443ea233e3b897df498de70dfd8337b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Definitions from the exercise | |
avg_packet_size = 400 | |
edge_def = """ | |
Edge Dist C_bps | |
AB 1 20000 | |
BC 3 10000 | |
AD 2 20000 | |
BE 5 20000 | |
CE 2 30000 | |
AF 3 15000 | |
CH 1 20000 | |
DF 2 10000 | |
DG 4 25000 | |
EH 2 20000 | |
FG 6 40000 | |
GH 3 25000""" | |
traffic_def = """ | |
AB 3 ABC 7 AD 4 ADE 2 AF 5 ADG 2 ADEH 5 | |
BC 3 BAD 7 BE 3 BAF 4 BADG 3 BCH 4 | |
CED 7 CE 5 CEDF 3 CHG 5 CH 3 | |
DE 2 DF 9 DG 2 DEH 9 | |
EDF 3 EHG 1 EH 2 | |
FG 1 FDEH 9 | |
GH 1 | |
""" | |
# parse the traffic specification | |
import re | |
traffic = [] | |
for m in re.finditer(r"([A-Z]+) ([0-9])", traffic_def): | |
# add the forward traffic | |
traffic.append((m.group(1), int(m.group(2)))) | |
# parse the edges | |
edges = [] | |
for line in edge_def.split("\n")[2:]: | |
edge, dist, cap = line.split("\t") | |
edge_rev = edge[::-1] | |
avg_load_packets = 0 | |
for traf_path, traf_packets in traffic: | |
if edge in traf_path or edge_rev in traf_path: | |
avg_load_packets += traf_packets | |
cap_packets = float(cap) / avg_packet_size | |
avg_delay = 1 / (cap_packets - avg_load_packets) | |
edges.append([edge, dist, avg_load_packets, float(cap), cap_packets, avg_delay, 0]) | |
# calculate weight | |
all_lines_traffic = sum(e[2] for e in edges) | |
all_avg_delay = 0 | |
print("Edge Dist Load CapBits CapPkgs AvgDelay Weight") | |
for i in range(len(edges)): | |
edge, dist, avg_load_packets, cap, cap_packets, avg_delay, weight = edges[i] | |
weight = edges[i][6] = avg_load_packets / all_lines_traffic | |
all_avg_delay += weight * avg_delay | |
print("%s %s %4d %0.01f %7.01f %0.04f %0.04f"%tuple(edges[i])) | |
print("All lines avg delay: ", all_avg_delay) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment