示例#1
0
 def test_approx_coloring(self):
     
     KR = kapoor_rizzi()
     
     degree = 40
     partition_n_nodes = 15
     
     # generate random graph
     g = graph_util().generate_random_regular_bipartite(partition_n_nodes, degree)
     
     # generate arbitrary partitions for approximation algo
     arbitrary = [graph_util().generate_random_regular_bipartite(partition_n_nodes, 1) for i in xrange((degree % 2) + 1)]
     
     # algorithm is destructive so save these for later comparisons
     original_nodes = g.nodes()
     arbitrary_edges = reduce(lambda x,y: x+y, (m.edges() for m in arbitrary))
     original_edges = g.edges() + arbitrary_edges
     
     solution = KR.solve(degree, g, arbitrary)
     
     # check the amount of matchings
     self.assertEqual(len(solution), degree + len(arbitrary), "Didn't get enough matchings")
     # check each matching:
     for matching in solution:
         # matching preserves nodes
         self.assertEquals(matching.nodes(), original_nodes)
         # every node has degree 1
         self.assertEquals(nx.degree_histogram(matching), [0, 2*partition_n_nodes])
     # matchings preserve edges
     matching_edges = reduce(lambda x,y: x+y, (m.edges() for m in solution))
     self.assertEquals(sorted(matching_edges), sorted(original_edges))#, "Mismatch between input and output edges")
示例#2
0
 def __init__(self, degree, n_nodes):
     self.degree = degree
     self.KR = kapoor_rizzi()
 
     # generate random graph
     self.g = graph_util().generate_random_regular_bipartite(n_nodes, degree)
     
     # generate arbitrary partitions for approximation algo
     self.arbitrary = [graph_util().generate_random_regular_bipartite(n_nodes, 1) for i in xrange((degree % 2) + 1)]
示例#3
0
    def __init__(self, degree, n_nodes):
        self.degree = degree
        self.KR = kapoor_rizzi()

        # generate random graph
        self.g = graph_util().generate_random_regular_bipartite(
            n_nodes, degree)

        # generate arbitrary partitions for approximation algo
        self.arbitrary = [
            graph_util().generate_random_regular_bipartite(n_nodes, 1)
            for i in xrange((degree % 2) + 1)
        ]
示例#4
0
    def test_approx_coloring(self):

        KR = kapoor_rizzi()

        degree = 40
        partition_n_nodes = 15

        # generate random graph
        g = graph_util().generate_random_regular_bipartite(
            partition_n_nodes, degree)

        # generate arbitrary partitions for approximation algo
        arbitrary = [
            graph_util().generate_random_regular_bipartite(
                partition_n_nodes, 1) for i in xrange((degree % 2) + 1)
        ]

        # algorithm is destructive so save these for later comparisons
        original_nodes = g.nodes()
        arbitrary_edges = reduce(lambda x, y: x + y,
                                 (m.edges() for m in arbitrary))
        original_edges = g.edges() + arbitrary_edges

        solution = KR.solve(degree, g, arbitrary)

        # check the amount of matchings
        self.assertEqual(len(solution), degree + len(arbitrary),
                         "Didn't get enough matchings")
        # check each matching:
        for matching in solution:
            # matching preserves nodes
            self.assertEquals(matching.nodes(), original_nodes)
            # every node has degree 1
            self.assertEquals(nx.degree_histogram(matching),
                              [0, 2 * partition_n_nodes])
        # matchings preserve edges
        matching_edges = reduce(lambda x, y: x + y,
                                (m.edges() for m in solution))
        self.assertEquals(sorted(matching_edges), sorted(
            original_edges))  #, "Mismatch between input and output edges")