예제 #1
0
def template_graph_coloring(positive_weight, negative_weight, filename, reduction = None, title = None):
    if (title is None): title = filename;
    print("\nGraph Coloring: ", title);
    
    graph = read_graph(filename);
    network = syncgcolor(graph.data, positive_weight, negative_weight, reduction);
    
    analyser = network.process(order = 0.999, solution = solve_type.FAST, collect_dynamic = True);
    sync.sync_visualizer.show_output_dynamic(analyser);

    clusters = analyser.allocate_color_clusters();
    
    for index in range(0, len(clusters)):
        print("Color #", index, ": ", clusters[index]);
        
    coloring_map = analyser.allocate_map_coloring();
    print("Number colors: ", max(coloring_map));
    
    draw_graph(graph, coloring_map);
    
    # Check validity of colors
    for index_node in range(len(graph.data)):
        color_neighbors = [ coloring_map[index] for index in range(len(graph.data[index_node])) if graph.data[index_node][index] != 0 and index_node != index];
        #print(index_node, map_coloring[index_node], color_neighbors, assigned_colors, map_coloring, "\n\n");
        
        if (coloring_map[index_node] in color_neighbors):
            print("Warining: Incorrect coloring");
            return;
예제 #2
0
def template_graph_coloring(positive_weight, negative_weight, filename, reduction = None, title = None):
    if (title is None): title = filename;
    print("\nGraph Coloring: ", title);
    
    graph = read_graph(filename);
    network = syncgcolor(graph.data, positive_weight, negative_weight, reduction);
    
    analyser = network.process(order = 0.999, solution = solve_type.FAST, collect_dynamic = True);
    sync.sync_visualizer.show_output_dynamic(analyser);

    clusters = analyser.allocate_color_clusters();
    
    for index in range(0, len(clusters)):
        print("Color #", index, ": ", clusters[index]);
        
    coloring_map = analyser.allocate_map_coloring();
    print("Number colors: ", max(coloring_map));
    
    draw_graph(graph, coloring_map);
    
    # Check validity of colors
    for index_node in range(len(graph.data)):
        color_neighbors = [ coloring_map[index] for index in range(len(graph.data[index_node])) if graph.data[index_node][index] != 0 and index_node != index];
        #print(index_node, map_coloring[index_node], color_neighbors, assigned_colors, map_coloring, "\n\n");
        
        if (coloring_map[index_node] in color_neighbors):
            print("Warining: Incorrect coloring");
            return;
예제 #3
0
 def templateTestColoringNegativeConnections(self, filename, solver_type = solve_type.FAST):
     result_testing = False;
     
     # If phases crosses each other because of random part of the network then we should try again.
     for attempt in range(0, 3, 1):        
         graph = read_graph(filename);
         syncgcolor_network = syncgcolor(graph.data, 0, -1);
         
         analyser = syncgcolor_network.process(solution = solver_type);
         
         map_coloring = analyser.allocate_map_coloring(0.05);
         
         # Check number of colors
         assigned_colors = set(map_coloring);
         
         # Check validity of color numbers
         for color_number in range(0, len(assigned_colors), 1):
             if (color_number not in assigned_colors):
                 continue;
             
         # Check validity of colors
         for index_node in range(len(graph.data)):
             color_neighbors = [ map_coloring[index] for index in range(len(graph.data[index_node])) if graph.data[index_node][index] != 0 and index_node != index];
             #print(index_node, map_coloring[index_node], color_neighbors, assigned_colors, map_coloring, "\n\n");
             if (map_coloring[index_node] in color_neighbors):
                 continue;
         
         result_testing = True;
             
     assert result_testing;
예제 #4
0
 def templateTestColoringNegativeConnections(self, filename, solver_type = solve_type.FAST):
     result_testing = False;
     
     # If phases crosses each other because of random part of the network then we should try again.
     for attempt in range(0, 3, 1):        
         graph = read_graph(filename);
         syncgcolor_network = syncgcolor(graph.data, 0, -1);
         
         analyser = syncgcolor_network.process(solution = solver_type);
         
         map_coloring = analyser.allocate_map_coloring(0.05);
         
         # Check number of colors
         assigned_colors = set(map_coloring);
         
         # Check validity of color numbers
         for color_number in range(0, len(assigned_colors), 1):
             if (color_number not in assigned_colors):
                 continue;
             
         # Check validity of colors
         for index_node in range(len(graph.data)):
             color_neighbors = [ map_coloring[index] for index in range(len(graph.data[index_node])) if graph.data[index_node][index] != 0 and index_node != index];
             #print(index_node, map_coloring[index_node], color_neighbors, assigned_colors, map_coloring, "\n\n");
             if (map_coloring[index_node] in color_neighbors):
                 continue;
         
         result_testing = True;
             
     assert result_testing;
예제 #5
0
def template_graph_coloring(positive_weight,
                            negative_weight,
                            filename,
                            reduction=None,
                            title=None):
    if (title is None): title = filename
    print("\nGraph Coloring: ", title)

    graph = read_graph(filename)
    network = syncgcolor(graph.data, positive_weight, negative_weight,
                         reduction)

    (t, dyn) = network.process(order=0.999,
                               solution=solve_type.FAST,
                               collect_dynamic=True)
    draw_dynamics(t, dyn, x_title="Time", y_title="Phase", y_lim=[0, 2 * 3.14])

    clusters = network.get_clusters()

    for index in range(0, len(clusters)):
        print("Color #", index, ": ", clusters[index])

    coloring_map = network.get_map_coloring()
    print("Number colors: ", max(coloring_map))

    draw_graph(graph, coloring_map)

    # Check validity of colors
    for index_node in range(len(graph.data)):
        color_neighbors = [
            coloring_map[index] for index in range(len(graph.data[index_node]))
            if graph.data[index_node][index] != 0 and index_node != index
        ]
        #print(index_node, map_coloring[index_node], color_neighbors, assigned_colors, map_coloring, "\n\n");

        if (coloring_map[index_node] in color_neighbors):
            print("Warining: Incorrect coloring")
            return