Guest User

Untitled

a guest
Jan 6th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.68 KB | None | 0 0
  1. import networkx as nx
  2. import matplotlib.pyplot as plt
  3.  
  4.  
  5. class Wezel:
  6. IDEN = 1
  7. x = 1
  8. y = 1
  9. klienci = 1
  10. def __init__(self, IDEN, x, y, klienci):
  11. self.IDEN = IDEN
  12. self.x = x
  13. self.y = y
  14. self.klienci = klienci
  15. def wypisz(self):
  16. print(self.IDEN, self.x, self.y, self.klienci)
  17. def IDEN_(self):
  18. return self.IDEN
  19. class Krawedz:
  20. IDEN = 1
  21. poczatek = 1
  22. koniec = 1
  23. koszt = 1
  24.  
  25. def __init__(self, IDEN, poczatek, koniec, koszt):
  26. self.IDEN = IDEN
  27. self.poczatek = poczatek
  28. self.koniec = koniec
  29. self.koszt = koszt
  30. def wypisz(self):
  31. print(self.IDEN, self.poczatek, self.koniec, self.koszt)
  32.  
  33. class Kabel:
  34. IDEN = 1
  35. pojemnosc = 1
  36. koszt = 1
  37. p_do_k = 1
  38. def __init__(self, IDEN, pojemnosc, koszt):
  39. self.IDEN = IDEN
  40. self.pojemnosc = pojemnosc
  41. self.koszt = koszt
  42. self.p_do_k = pojemnosc/koszt
  43. def wypisz(self):
  44. print(self.IDEN, self.pojemnosc, self.koszt, self.p_do_k)
  45. class Graf:
  46. Wezly = []
  47. Krawedzie = []
  48. Kable = []
  49. def __init__(self, Wezly, Krawedzie, Kable):
  50. self.Wezly = Wezly
  51. self.Krawedzie = Krawedzie
  52. self.Kable = Kable
  53. def wypisz(self):
  54. print(len(self.Wezly), "wezły")
  55. for x in self.Wezly:
  56. x.wypisz()
  57. print(len(self.Krawedzie), "krawedzie")
  58. for x in self.Krawedzie:
  59. x.wypisz()
  60. print(len(self.Kable), "kable")
  61. for x in self.Kable:
  62. x.wypisz()
  63. def Dijkstra(Gr, Graf, start, end, weight):
  64. path_n = nx.dijkstra_path(Gr, start, end, weight)
  65. G = nx.Graph()
  66. s_krawedzie = {}
  67. pozycje = {}
  68. etykiety = {}
  69. for x in Graf.Wezly:
  70. if x.IDEN in path_n:
  71. G.add_node(x.IDEN)
  72. s_krawedzie.update({x.IDEN: x.IDEN})
  73. pozycje.update({x.IDEN: [x.x, x.y]})
  74. if x.klienci == -1:
  75. centrala.update({x.IDEN: str(x.IDEN) + "\n Centrala"})
  76. else:
  77. centrala.update({x.IDEN: x.IDEN})
  78. else:
  79. pozycje.update({x.IDEN: [0, 0]})
  80. for x in Graf.Krawedzie:
  81. if x.poczatek in path_n and x.koniec in path_n:
  82. G.add_edge(x.poczatek, x.koniec, label=x.koszt)
  83. etykiety = nx.get_edge_attributes(G, 'label')
  84. plt.figure(2)
  85. nx.draw_networkx_labels(G, labels=centrala, pos=pozycje, font_size=12)
  86. nx.draw_networkx_edge_labels(G, label_pos=0.5, font_color="b", edge_labels=etykiety, pos=pozycje)
  87. nx.draw(G, pos=pozycje)
  88. plt.title("Najkrótsza ścieżka według algorytmu Dijkstry")
  89. plt.show()
  90.  
  91. wezly = []
  92. krawedzie = []
  93. kable = []
  94. numer_linijki = 0
  95.  
  96. G = nx.Graph()
  97.  
  98. with open("rzeczy.txt", "r") as f:
  99. data = f.readlines()
  100. f.close()
  101. data1 = []
  102. for line in data:
  103. words = line.split()
  104. if words[0] == "#":
  105. continue
  106. data1.append(line)
  107.  
  108. for line in data1:
  109. numer_linijki = numer_linijki + 1
  110. words = line.split()
  111. if words[0] == "WEZLY":
  112. temp = data1[numer_linijki]
  113. for x in range(1, int(words[2])+1):
  114. tempw = data1[numer_linijki+x-1].split()
  115. wezly.append(Wezel(int(tempw[0]), int(tempw[1]), int(tempw[2]), int(tempw[3])))
  116. if words[0] == "KRAWEDZIE":
  117. temp = data1[numer_linijki]
  118. for x in range(1, int(words[2])+1):
  119. tempw = data1[numer_linijki+x-1].split()
  120. krawedzie.append(Krawedz(int(tempw[0]), int(tempw[1]), int(tempw[2]), int(tempw[3])))
  121. if words[0] == "KABLE":
  122. temp = data1[numer_linijki]
  123. for x in range(1, int(words[2])+1):
  124. tempw = data1[numer_linijki+x-1].split()
  125. kable.append(Kabel(int(tempw[0]), int(tempw[1]), int(tempw[2])))
  126.  
  127. Graf = Graf(wezly, krawedzie, kable)
  128. Graf.wypisz()
  129. s_krawedzie = {}
  130. pozycje = {}
  131. centrala = {}
  132. etykiety = {}
  133. for x in Graf.Wezly:
  134. G.add_node(x.IDEN)
  135. s_krawedzie.update({x.IDEN: x.IDEN})
  136. pozycje.update({x.IDEN: [x.x, x.y]})
  137. if x.klienci == -1:
  138. centrala.update({x.IDEN: str(x.IDEN)+"\n Centrala"})
  139. else:
  140. centrala.update({x.IDEN: x.IDEN})
  141. print(G.nodes())
  142. path_e = []
  143. sciezka = {}
  144. for x in Graf.Krawedzie:
  145. G.add_edge(x.poczatek, x.koniec, label=x.koszt)
  146. print(G.edges())
  147. f1 = plt.figure(1)
  148. etykiety = nx.get_edge_attributes(G, 'label')
  149. nx.relabel_nodes(G, s_krawedzie, copy=False)
  150. nx.draw_networkx_labels(G, labels=centrala, pos=pozycje, font_size=12)
  151. nx.draw_networkx_edge_labels(G, label_pos=0.5, font_color="b", edge_labels=etykiety, pos=pozycje)
  152. nx.draw(G, pos=pozycje)
  153. plt.savefig("simple_path.png") # save as png
  154. # display
  155. Dijkstra(G, Graf, 3, 5, 'label')
Advertisement
Add Comment
Please, Sign In to add comment