From 6978bfceec3c73573c561231e5fb007a5a607f40 Mon Sep 17 00:00:00 2001 From: hasslesstech Date: Wed, 30 Sep 2026 14:30:08 +0300 Subject: [PATCH] initial commit (S=4) --- main.py | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 main.py diff --git a/main.py b/main.py new file mode 100644 index 0000000..1db0fb5 --- /dev/null +++ b/main.py @@ -0,0 +1,76 @@ +import matplotlib.pyplot as plt +import networkx as nx + +def nn(cluster_no, node_name): + return str(cluster_no) + '-' + node_name + +def build_cluster(n): + g = nx.Graph() + nodes = ['ls', 'lu', 'ld', 'm', 'rd', 'ru', 'rs'] + edges = [('ls', 'lu'), ('ls', 'ld'), ('ld', 'lu'), + ('rs', 'ru'), ('rs', 'rd'), ('rd', 'ru'), + ('lu', 'm'), ('ld', 'm'), + ('ru', 'm'), ('rd', 'm')] + + g.add_nodes_from([nn(n, x) for x in nodes]) + g.add_edges_from([tuple(nn(n, y) for y in x) for x in edges]) + + return g + +def build_network(n): + g = build_cluster(0) + + for i in range(1, n): + c = build_cluster(i) + g = nx.union(g, c) + + if i % 2: + g.add_edge(nn(i, 'lu'), nn(i-1, 'lu')) + g.add_edge(nn(i, 'rd'), nn(i-1, 'rd')) + else: + g.add_edge(nn(i, 'ld'), nn(i-1, 'ld')) + g.add_edge(nn(i, 'ru'), nn(i-1, 'ru')) + + g.add_edge(nn(i, 'ls'), nn(i-1, 'rs')) + g.add_edge(nn(i, 'rs'), nn(i-1, 'ls')) + + return g + +def analyze(G: nx.Graph) -> dict: + N = G.number_of_nodes() + E = G.number_of_edges() + degs = G.degree() + s_vals = [s[1] for s in degs] + S = max(s_vals) + D = nx.diameter(G) + D_average = nx.average_shortest_path_length(G) + Q = N*D_average/E + C = N*D*S + return { + 'N': N, + 'E': E, + 'Ступінь': S, + 'Діаметр': D, + 'Середній діаметр': D_average, + 'Топологічний трафік': Q, + 'Вартість': C, + 'Graph': G.copy() + } + +def main(): + i = 0 + + while True: + i += 1 + g = build_network(i) + + if g.number_of_nodes() > 1000: + break + + r = analyze(g) + print(r) + #nx.draw(g, with_labels = True) + #plt.show() + +if __name__=="__main__": + main()