예제 #1
0
    def test_korman(self):
        (num_colors, classes) = korman(self.petersen_graph)
        self.assertEqual(num_colors, self.petersen_colors)
        self.assertTrue(is_valid_color_classes(self.petersen_graph, classes))

        (num_colors, classes) = korman(self.small_random)
        self.assertEqual(num_colors, self.small_colors)
        self.assertEqual(classes, self.small_classes)

        (num_colors, classes) = korman(self.small_random2)
        self.assertEqual(num_colors, self.small_colors2)
        self.assertEqual(classes, self.small_classes2)

        (num_colors, classes) = korman(self.big_random)
        self.assertEqual(num_colors, self.big_colors)
        self.assertEqual(classes, self.big_classes)

        (num_colors, classes) = korman(self.coprime_graph30)
        self.assertEqual(num_colors, self.coprime_graph30_colors)
        self.assertTrue(is_valid_color_classes(self.coprime_graph30, classes))

        (num_colors, color_map) = korman(self.coprime_graph30, classes=False)
        self.assertEqual(color_map, {1: 7, 2: 1, 3: 2, 4: 1, 5: 3, 6: 1, 7: 4, 8: 1, 9: 2, 10: 1, 11: 5, 12: 1, 13: 6,
                                     14: 1, 15: 2, 16: 1, 17: 8, 18: 1, 19: 9, 20: 1, 21: 2, 22: 1, 23: 10, 24: 1, 25:
                                     3, 26: 1, 27: 2, 28: 1, 29: 11, 30: 1})

        for i in xrange(10):
            graph = random_graph(20, 0.5)
            k_num, classes = korman(graph)
            b_num, classes = branch_and_bound(graph)
            self.assertEqual(b_num, k_num)
            self.assertTrue(is_valid_color_classes(graph, classes))
예제 #2
0
    def test_branch_and_bound(self):
        print "Testing branch and bound coloring algorithm"
        (num_colors, classes) = branch_and_bound(self.petersen_graph)
        self.assertEqual(num_colors, self.petersen_colors)
        self.assertTrue(is_valid_color_classes(self.petersen_graph, classes))

        (num_colors, classes) = branch_and_bound(self.coprime_graph30)
        self.assertEqual(num_colors, self.coprime_graph30_colors)
        self.assertTrue(is_valid_color_classes(self.coprime_graph30, classes))

        (num_colors, color_map) = branch_and_bound(self.coprime_graph30, classes=False)
        self.assertEqual(color_map, {1: 5, 2: 11, 3: 10, 4: 11, 5: 9, 6: 10, 7: 8, 8: 11, 9: 10, 10: 9, 11: 7, 12: 10,
                                     13: 6, 14: 8, 15: 9, 16: 11, 17: 4, 18: 10, 19: 3, 20: 9, 21: 8, 22: 7, 23: 2, 24:
                                     10, 25: 9, 26: 6, 27: 10,
                                     28: 8, 29: 1, 30: 9})

        (num_colors, classes) = branch_and_bound(self.small_random)
        self.assertEqual(num_colors, self.small_colors)
        self.assertEqual(classes, self.small_classes)

        (num_colors, classes) = branch_and_bound(self.small_random2)
        self.assertEqual(num_colors, self.small_colors2)
        self.assertEqual(classes, self.small_classes2)

        (num_colors, classes) = branch_and_bound(self.big_random)
        self.assertEqual(num_colors, self.big_colors)
        self.assertEqual(classes, self.big_classes)

        graph = random_graph(30, 0.5)
        (num_colors, classes) = branch_and_bound(graph)
        self.assertTrue(is_valid_color_classes(graph, classes))

        for i in xrange(10):
            graph = random_graph(10, 0.8)
            _, classes = branch_and_bound(graph)
            self.assertTrue(is_valid_color_classes(graph, classes))