Guest User

Polynomial time vortex solver

a guest
Jul 9th, 2024
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.48 KB | None | 0 0
  1.  
  2. import networkx as nx
  3.  
  4. # Generate a random graph
  5. def generate_graph(num_nodes, num_edges):
  6. G = nx.gnm_random_graph(num_nodes, num_edges)
  7. return G
  8.  
  9. # Layering approach for Vertex Cover
  10. def vertex_cover_layered(G, k, layer_size):
  11. edges = list(G.edges())
  12. layers = [edges[i:i + layer_size] for i in range(0, len(edges), layer_size)]
  13. cover = set()
  14.  
  15. for layer in layers:
  16. for u, v in layer:
  17. if u not in cover and v not in cover:
  18. cover.add(u)
  19. cover.add(v)
  20. if len(cover) > k:
  21. return False
  22. return True
  23.  
  24. # Measure time complexity for Vertex Cover using layering
  25. def measure_vertex_cover_time(num_nodes, num_edges, k, layer_size):
  26. G = generate_graph(num_nodes, num_edges)
  27. start_solve_time = time.time()
  28. solvable = vertex_cover_layered(G, k, layer_size)
  29. end_solve_time = time.time()
  30. total_solve_time = end_solve_time - start_solve_time
  31. return total_solve_time, solvable
  32.  
  33. # Testing parameters for Vertex Cover
  34. num_nodes_steps = [50, 100, 200, 400, 800] # Larger instances of nodes
  35. num_edges_factor = 2 # Number of edges will be num_nodes * num_edges_factor
  36. k = 20 # Vertex cover size
  37. layer_size = 50 # Size of each layer
  38.  
  39. results_vertex_cover = []
  40.  
  41. # Perform tests and collect results
  42. for num_nodes in tqdm(num_nodes_steps, desc="Benchmarking Vertex Cover"):
  43. num_edges = num_nodes * num_edges_factor
  44. total_solve_time, solvable = measure_vertex_cover_time(num_nodes, num_edges, k, layer_size)
  45. results_vertex_cover.append((num_nodes, num_edges, total_solve_time, solvable))
  46. print(f"Nodes: {num_nodes}, Edges: {num_edges}, Solving Time: {total_solve_time:.2f}s, Solvable: {solvable}")
  47.  
  48. # Visualization for Vertex Cover
  49. num_nodes, num_edges, solve_times, solvables = zip(*results_vertex_cover)
  50.  
  51. fig, ax = plt.subplots(figsize=(12, 8))
  52. ax.plot(num_nodes, solve_times, marker='o', linestyle='-', color='b', label='Solving Time')
  53. ax.set_xlabel('Number of Nodes')
  54. ax.set_ylabel('Time (seconds)')
  55. ax.set_title('Empirical Analysis of Layering Approach for Vertex Cover')
  56. ax.legend()
  57. ax.grid(True)
  58.  
  59. # Fit a polynomial curve to the data
  60. coefficients = np.polyfit(num_nodes, solve_times, 2) # Quadratic fit
  61. polynomial = np.poly1d(coefficients)
  62. x_fit = np.linspace(min(num_nodes), max(num_nodes), 100)
  63. y_fit = polynomial(x_fit)
  64. ax.plot(x_fit, y_fit, linestyle='--', color='r', label=f'Polynomial Fit: {polynomial}')
  65. ax.legend()
  66.  
  67. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment