Skip to content

Instantly share code, notes, and snippets.

@luelista
Created June 14, 2018 08:38
Show Gist options
  • Save luelista/f443ea233e3b897df498de70dfd8337b to your computer and use it in GitHub Desktop.
Save luelista/f443ea233e3b897df498de70dfd8337b to your computer and use it in GitHub Desktop.
# 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