Exemple #1
0
    def test_permutate_method_with_multiple_results(self):
        permutator = FastColorPermutator()
        aspiration_criteria = AspirationCriteria(None, None)
        aspiration_criteria.is_permutation_allowed = Mock(return_value=True)
        n1 = Node(color=3, node_id=3)
        n2 = Node(color=3, node_id=5)
        n3 = Node(color=3, node_id=7)
        n4 = Node(color=3, node_id=9)
        n5 = Node(color=3, node_id=10)
        n1.add_edges([n2])
        n2.add_edges([n1, n3])
        n3.add_edges([n2, n4])
        n4.add_edges([n3, n5])
        n5.add_edges([n4])

        permutations, best_score = permutator.permutate(
            n1, [3, 4], aspiration_criteria)

        self.assertEqual(-1, best_score)
        self.assertEqual(3, len(permutations))
        self.assertEqual(n2, permutations[0][0])
        self.assertEqual(4, permutations[0][1])
        self.assertEqual(n3, permutations[1][0])
        self.assertEqual(4, permutations[1][1])
        self.assertEqual(n4, permutations[2][0])
        self.assertEqual(4, permutations[2][1])
    def test_permutate_method_with_multiple_results(self):
        permutator = FastColorPermutator()
        aspiration_criteria = AspirationCriteria(None, None)
        aspiration_criteria.is_permutation_allowed = Mock(return_value=True)
        n1 = Node(color=3, node_id=3)
        n2 = Node(color=3, node_id=5)
        n3 = Node(color=3, node_id=7)
        n4 = Node(color=3, node_id=9)
        n5 = Node(color=3, node_id=10)
        n1.add_edges([n2])
        n2.add_edges([n1, n3])
        n3.add_edges([n2, n4])
        n4.add_edges([n3, n5])
        n5.add_edges([n4])

        permutations, best_score = permutator.permutate(n1, [3, 4], aspiration_criteria)

        self.assertEqual(-1, best_score)
        self.assertEqual(3, len(permutations))
        self.assertEqual(n2, permutations[0][0])
        self.assertEqual(4, permutations[0][1])
        self.assertEqual(n3, permutations[1][0])
        self.assertEqual(4, permutations[1][1])
        self.assertEqual(n4, permutations[2][0])
        self.assertEqual(4, permutations[2][1])
Exemple #3
0
    def test_search_method_with_easy_substitutions(self):
        search_performer = GraphColoringSearchPerformer(
            StopCriteria(10, 10), 3)
        n1 = Node('red')
        n2 = Node('red')
        n3 = Node('red')
        n4 = Node('red')
        n5 = Node('red')
        n1.add_edges([n2, n3])
        n2.add_edges([n1, n4])
        n3.add_edges([n1, n4])
        n4.add_edges([n2, n3, n5])
        n5.add_edges([n4])

        search_result = search_performer.search(n1, ['red', 'green'])
        n1_in_search_result = search_result.get_node_of_id(n1.node_id)
        n2_in_search_result = search_result.get_node_of_id(n2.node_id)
        n3_in_search_result = search_result.get_node_of_id(n3.node_id)
        n4_in_search_result = search_result.get_node_of_id(n4.node_id)
        n5_in_search_result = search_result.get_node_of_id(n5.node_id)

        self.assertIsNotNone(n1_in_search_result)
        self.assertIsNotNone(n2_in_search_result)
        self.assertIsNotNone(n3_in_search_result)
        self.assertIsNotNone(n4_in_search_result)
        self.assertIsNotNone(n5_in_search_result)
        self.assertEqual('green', n1_in_search_result.color)
        self.assertEqual('red', n2_in_search_result.color)
        self.assertEqual('red', n3_in_search_result.color)
        self.assertEqual('green', n4_in_search_result.color)
        self.assertEqual('red', n5_in_search_result.color)
    def test_search_method_trivially(self):
        search_performer = GraphColoringSearchPerformer(StopCriteria(10, 10), 4)
        n1 = Node('red')
        n2 = Node('green')
        n3 = Node('green')
        n4 = Node('red')
        n5 = Node('green')
        n1.add_edges([n2, n3])
        n2.add_edges([n1, n4])
        n3.add_edges([n1, n4])
        n4.add_edges([n2, n3, n5])
        n5.add_edges([n4])

        search_result = search_performer.search(n1, ['red', 'green'])
        n1_in_search_result = search_result.get_node_of_id(n1.node_id)
        n2_in_search_result = search_result.get_node_of_id(n2.node_id)
        n3_in_search_result = search_result.get_node_of_id(n3.node_id)
        n4_in_search_result = search_result.get_node_of_id(n4.node_id)
        n5_in_search_result = search_result.get_node_of_id(n5.node_id)

        self.assertIsNotNone(n1_in_search_result)
        self.assertIsNotNone(n2_in_search_result)
        self.assertIsNotNone(n3_in_search_result)
        self.assertIsNotNone(n4_in_search_result)
        self.assertIsNotNone(n5_in_search_result)
        self.assertEqual('red', n1_in_search_result.color)
        self.assertEqual('green', n2_in_search_result.color)
        self.assertEqual('green', n3_in_search_result.color)
        self.assertEqual('red', n4_in_search_result.color)
        self.assertEqual('green', n5_in_search_result.color)
Exemple #5
0
    def test_clone_method(self):
        n1 = Node(1, 123)
        n2 = Node(2, 456)
        n3 = Node(3, 789)
        n4 = Node(4, 333)
        n1.add_edges([n2, n3, n4])
        n2.add_edges([n1, n4])
        n3.add_edges([n1, n4])
        n4.add_edges([n1, n2, n3])

        cloned_n3 = GraphCloner.clone(n3)
        cloned_n1 = cloned_n3.get_node_of_id(123)
        cloned_n2 = cloned_n3.get_node_of_id(456)
        cloned_n3 = cloned_n3.get_node_of_id(789)
        cloned_n4 = cloned_n3.get_node_of_id(333)

        self.assertNotEqual(n3, cloned_n3)
        self.assertEqual(789, cloned_n3.node_id)
        self.assertEqual(3, cloned_n3.color)
        self.assertEqual(2, len(cloned_n3.edges))
        self.assertNotEqual(n4, cloned_n4)
        self.assertEqual(333, cloned_n4.node_id)
        self.assertEqual(4, cloned_n4.color)
        self.assertEqual(3, len(cloned_n4.edges))
        self.assertNotEqual(n1, cloned_n1)
        self.assertEqual(123, cloned_n1.node_id)
        self.assertEqual(1, cloned_n1.color)
        self.assertEqual(3, len(cloned_n1.edges))
        self.assertNotEqual(n2, cloned_n2)
        self.assertEqual(789, cloned_n3.node_id)
        self.assertEqual(2, cloned_n2.color)
        self.assertEqual(2, len(cloned_n2.edges))
Exemple #6
0
    def test_evaluate_method_second(self):
        n1 = Node('red')
        n2 = Node('green')
        n3 = Node('green')
        n4 = Node('red')
        n5 = Node('red')
        n1.add_edges([n2, n3])
        n2.add_edges([n1, n4])
        n3.add_edges([n1, n4])
        n4.add_edges([n2, n3, n5])
        n5.add_edges([n4])

        evaluated_cost = CostEvaluator.evaluate(n1, ['red', 'green'])

        self.assertEqual(-7, evaluated_cost)
    def test_is_coloring_valid_method_positive(self):
        n1 = Node('red')
        n2 = Node('green')
        n3 = Node('green')
        n4 = Node('red')
        n5 = Node('green')
        n1.add_edges([n2, n3])
        n2.add_edges([n1, n4])
        n3.add_edges([n1, n4])
        n4.add_edges([n2, n3, n5])
        n5.add_edges([n4])

        coloring_valid = ColoringValidator.is_coloring_valid(n1)

        self.assertTrue(coloring_valid)
    def test_evaluate_method_second(self):
        n1 = Node('red')
        n2 = Node('green')
        n3 = Node('green')
        n4 = Node('red')
        n5 = Node('red')
        n1.add_edges([n2, n3])
        n2.add_edges([n1, n4])
        n3.add_edges([n1, n4])
        n4.add_edges([n2, n3, n5])
        n5.add_edges([n4])

        evaluated_cost = CostEvaluator.evaluate(n1, ['red', 'green'])

        self.assertEqual(-7, evaluated_cost)
    def test_find_permutations_method_emergency_procedure(self):
        search_performer = GraphColoringSearchPerformer(StopCriteria(10, 10), 5)
        n1 = Node('red', 12)
        n2 = Node('red', 21)
        n3 = Node('red', 33)
        n4 = Node('red', 34)
        n5 = Node('red', 72)
        search_performer.memory.add_to_memory(n1, 'black')
        search_performer.memory.add_to_memory(n2, 'black')
        search_performer.memory.add_to_memory(n3, 'black')
        search_performer.memory.add_to_memory(n4, 'black')
        search_performer.memory.add_to_memory(n5, 'black')
        n1.add_edges([n2])
        n2.add_edges([n3])
        n3.add_edges([n4])
        n4.add_edges([n5])

        first_permutations = search_performer.find_permutations(n1, ['black', 'red'])[0]
        first_node, first_node_color = first_permutations[0]
        first_node.set_color(first_node_color)
        search_performer.memory.add_to_memory(first_node, first_node.previous_color)
        second_permutations = search_performer.find_permutations(first_node, ['black', 'red'])[0]
        second_node, second_node_color = second_permutations[0]
        second_node.set_color(second_node_color)
        search_performer.memory.add_to_memory(second_node, second_node.previous_color)
        third_permutations = search_performer.find_permutations(second_node, ['black', 'red'])[0]
        third_node, third_node_color = third_permutations[0]
        third_node.set_color(third_node_color)
        search_performer.memory.add_to_memory(third_node, third_node.previous_color)
        fourth_permutations = search_performer.find_permutations(third_node, ['black', 'red'])[0]
        fourth_node, fourth_node_color = fourth_permutations[0]
        fourth_node.set_color(fourth_node_color)
        search_performer.memory.add_to_memory(fourth_node, fourth_node.previous_color)
        fifth_permutations = search_performer.find_permutations(fourth_node, ['black', 'red'])[0]
        fifth_node, fifth_node_color = fifth_permutations[0]
        fifth_node.set_color(fifth_node_color)

        self.assertEqual(1, len(first_permutations))
        self.assertEqual(12, first_node.node_id)
        self.assertEqual('black', first_node.color)
        self.assertEqual(1, len(second_permutations))
        self.assertEqual(21, second_node.node_id)
        self.assertEqual('black', second_node.color)
        self.assertEqual(1, len(third_permutations))
        self.assertEqual(33, third_node.node_id)
        self.assertEqual('black', third_node.color)
        self.assertEqual(1, len(fourth_permutations))
        self.assertEqual(34, fourth_node.node_id)
        self.assertEqual('black', fourth_node.color)
        self.assertEqual(1, len(fifth_permutations))
        self.assertEqual(72, fifth_node.node_id)
        self.assertEqual('black', fifth_node.color)
    def test_permutate_method_with_banned_results(self):
        permutator = FastColorPermutator()
        n1 = Node(color=1, node_id=3)
        n2 = Node(color=1, node_id=5)
        n3 = Node(color=1, node_id=7)
        n4 = Node(color=1, node_id=9)
        n5 = Node(color=1, node_id=10)
        n1.add_edges([n2])
        n2.add_edges([n1, n3])
        n3.add_edges([n2, n4])
        n4.add_edges([n3, n5])
        n5.add_edges([n4])
        aspiration_criteria = AspirationCriteria([(n2.node_id, 2), (n3.node_id, 2)], -1)

        permutations, best_score = permutator.permutate(n1, [1, 2], aspiration_criteria)

        self.assertEqual(-1, best_score)
        self.assertEqual(1, len(permutations))
        self.assertEqual(n4, permutations[0][0])
        self.assertEqual(2, permutations[0][1])
Exemple #11
0
    def test_color_classes_method(self):
        n1 = Node(color='#')
        n2 = Node(color='*')
        n3 = Node(color='#')
        n4 = Node(color='$')
        n1.add_edges([n2, n3, n4])
        n2.add_edges([n1, n3, n4])
        n3.add_edges([n1, n2, n4])
        n4.add_edges([n1, n2, n3])

        color_classes = n1.get_colors_count()

        self.assertEqual(3, color_classes)
Exemple #12
0
    def test_permutate_method_with_banned_results(self):
        permutator = FastColorPermutator()
        n1 = Node(color=1, node_id=3)
        n2 = Node(color=1, node_id=5)
        n3 = Node(color=1, node_id=7)
        n4 = Node(color=1, node_id=9)
        n5 = Node(color=1, node_id=10)
        n1.add_edges([n2])
        n2.add_edges([n1, n3])
        n3.add_edges([n2, n4])
        n4.add_edges([n3, n5])
        n5.add_edges([n4])
        aspiration_criteria = AspirationCriteria([(n2.node_id, 2),
                                                  (n3.node_id, 2)], -1)

        permutations, best_score = permutator.permutate(
            n1, [1, 2], aspiration_criteria)

        self.assertEqual(-1, best_score)
        self.assertEqual(1, len(permutations))
        self.assertEqual(n4, permutations[0][0])
        self.assertEqual(2, permutations[0][1])
Exemple #13
0
    def test_get_node_of_id_method(self):
        n1 = Node(node_id=8)
        n2 = Node(node_id=9)
        n3 = Node(node_id=12)
        n4 = Node(node_id=1)
        n5 = Node(node_id=88)
        n1.add_edges([n5, n3])
        n2.add_edges([n4])
        n3.add_edges([n2, n1])
        n4.add_edges([n1, n5])

        self.assertEqual(n1, n1.get_node_of_id(8))
        self.assertEqual(n2, n1.get_node_of_id(9))
        self.assertEqual(n3, n1.get_node_of_id(12))
        self.assertEqual(n4, n1.get_node_of_id(1))
        self.assertEqual(n5, n1.get_node_of_id(88))
Exemple #14
0
    def test_is_graph_connected_method_negative(self):
        n1 = Node()
        n2 = Node()
        n3 = Node()
        n4 = Node()
        n5 = Node()
        n1.add_edges([n2, n3])
        n2.add_edges([n1])
        n3.add_edges([n1])
        n4.add_edges([n5])
        n5.add_edges([n4])

        n1_graph_connected = ConnectionValidator.is_graph_connected(n1, 5)
        n2_graph_connected = ConnectionValidator.is_graph_connected(n2, 5)
        n3_graph_connected = ConnectionValidator.is_graph_connected(n3, 5)
        n4_graph_connected = ConnectionValidator.is_graph_connected(n4, 5)
        n5_graph_connected = ConnectionValidator.is_graph_connected(n5, 5)

        self.assertFalse(n1_graph_connected)
        self.assertFalse(n2_graph_connected)
        self.assertFalse(n3_graph_connected)
        self.assertFalse(n4_graph_connected)
        self.assertFalse(n5_graph_connected)
Exemple #15
0
    def test_permutate_method(self):
        n1 = Node(1, node_id=1)
        n2 = Node(2, node_id=2)
        n3 = Node(3, node_id=3)
        n1.add_edges([n2])
        n2.add_edges([n3])
        n3.add_edges([n1])

        permutations = self.color_permutator.permutate(n1, [1, 2, 3])

        self.assertEqual(6, len(permutations))

        self.assertEqual(2, permutations[0].get_node_of_id(1).color)
        self.assertEqual(1, permutations[0].get_node_of_id(1).previous_color)
        self.assertEqual(2, permutations[0].get_node_of_id(2).color)
        self.assertEqual(2, permutations[0].get_node_of_id(2).previous_color)
        self.assertEqual(3, permutations[0].get_node_of_id(3).color)
        self.assertEqual(3, permutations[0].get_node_of_id(3).previous_color)

        self.assertEqual(3, permutations[1].get_node_of_id(1).color)
        self.assertEqual(1, permutations[1].get_node_of_id(1).previous_color)
        self.assertEqual(2, permutations[1].get_node_of_id(2).color)
        self.assertEqual(2, permutations[1].get_node_of_id(2).previous_color)
        self.assertEqual(3, permutations[1].get_node_of_id(3).color)
        self.assertEqual(3, permutations[1].get_node_of_id(3).previous_color)

        self.assertEqual(1, permutations[2].get_node_of_id(1).color)
        self.assertEqual(1, permutations[2].get_node_of_id(1).previous_color)
        self.assertEqual(1, permutations[2].get_node_of_id(2).color)
        self.assertEqual(2, permutations[2].get_node_of_id(2).previous_color)
        self.assertEqual(3, permutations[2].get_node_of_id(3).color)
        self.assertEqual(3, permutations[2].get_node_of_id(3).previous_color)

        self.assertEqual(1, permutations[3].get_node_of_id(1).color)
        self.assertEqual(1, permutations[3].get_node_of_id(1).previous_color)
        self.assertEqual(3, permutations[3].get_node_of_id(2).color)
        self.assertEqual(2, permutations[3].get_node_of_id(2).previous_color)
        self.assertEqual(3, permutations[3].get_node_of_id(3).color)
        self.assertEqual(3, permutations[3].get_node_of_id(3).previous_color)

        self.assertEqual(1, permutations[4].get_node_of_id(1).color)
        self.assertEqual(1, permutations[4].get_node_of_id(1).previous_color)
        self.assertEqual(2, permutations[4].get_node_of_id(2).color)
        self.assertEqual(2, permutations[4].get_node_of_id(2).previous_color)
        self.assertEqual(1, permutations[4].get_node_of_id(3).color)
        self.assertEqual(3, permutations[4].get_node_of_id(3).previous_color)

        self.assertEqual(1, permutations[5].get_node_of_id(1).color)
        self.assertEqual(1, permutations[5].get_node_of_id(1).previous_color)
        self.assertEqual(2, permutations[5].get_node_of_id(2).color)
        self.assertEqual(2, permutations[5].get_node_of_id(2).previous_color)
        self.assertEqual(2, permutations[5].get_node_of_id(3).color)
        self.assertEqual(3, permutations[5].get_node_of_id(3).previous_color)
    def test_permutate_method(self):
        n1 = Node(1, node_id=1)
        n2 = Node(2, node_id=2)
        n3 = Node(3, node_id=3)
        n1.add_edges([n2])
        n2.add_edges([n3])
        n3.add_edges([n1])

        permutations = self.color_permutator.permutate(n1, [1, 2, 3])

        self.assertEqual(6, len(permutations))

        self.assertEqual(2, permutations[0].get_node_of_id(1).color)
        self.assertEqual(1, permutations[0].get_node_of_id(1).previous_color)
        self.assertEqual(2, permutations[0].get_node_of_id(2).color)
        self.assertEqual(2, permutations[0].get_node_of_id(2).previous_color)
        self.assertEqual(3, permutations[0].get_node_of_id(3).color)
        self.assertEqual(3, permutations[0].get_node_of_id(3).previous_color)

        self.assertEqual(3, permutations[1].get_node_of_id(1).color)
        self.assertEqual(1, permutations[1].get_node_of_id(1).previous_color)
        self.assertEqual(2, permutations[1].get_node_of_id(2).color)
        self.assertEqual(2, permutations[1].get_node_of_id(2).previous_color)
        self.assertEqual(3, permutations[1].get_node_of_id(3).color)
        self.assertEqual(3, permutations[1].get_node_of_id(3).previous_color)

        self.assertEqual(1, permutations[2].get_node_of_id(1).color)
        self.assertEqual(1, permutations[2].get_node_of_id(1).previous_color)
        self.assertEqual(1, permutations[2].get_node_of_id(2).color)
        self.assertEqual(2, permutations[2].get_node_of_id(2).previous_color)
        self.assertEqual(3, permutations[2].get_node_of_id(3).color)
        self.assertEqual(3, permutations[2].get_node_of_id(3).previous_color)

        self.assertEqual(1, permutations[3].get_node_of_id(1).color)
        self.assertEqual(1, permutations[3].get_node_of_id(1).previous_color)
        self.assertEqual(3, permutations[3].get_node_of_id(2).color)
        self.assertEqual(2, permutations[3].get_node_of_id(2).previous_color)
        self.assertEqual(3, permutations[3].get_node_of_id(3).color)
        self.assertEqual(3, permutations[3].get_node_of_id(3).previous_color)

        self.assertEqual(1, permutations[4].get_node_of_id(1).color)
        self.assertEqual(1, permutations[4].get_node_of_id(1).previous_color)
        self.assertEqual(2, permutations[4].get_node_of_id(2).color)
        self.assertEqual(2, permutations[4].get_node_of_id(2).previous_color)
        self.assertEqual(1, permutations[4].get_node_of_id(3).color)
        self.assertEqual(3, permutations[4].get_node_of_id(3).previous_color)

        self.assertEqual(1, permutations[5].get_node_of_id(1).color)
        self.assertEqual(1, permutations[5].get_node_of_id(1).previous_color)
        self.assertEqual(2, permutations[5].get_node_of_id(2).color)
        self.assertEqual(2, permutations[5].get_node_of_id(2).previous_color)
        self.assertEqual(2, permutations[5].get_node_of_id(3).color)
        self.assertEqual(3, permutations[5].get_node_of_id(3).previous_color)
Exemple #17
0
    def test_node_count_method(self):
        n1 = Node('a')
        n2 = Node('b')
        n3 = Node('c')
        n4 = Node('d')
        n5 = Node('e')
        n1.add_edges([n2, n5])
        n2.add_edges([n3])
        n3.add_edges([n4])

        node_count = n1.node_count()

        self.assertEqual(node_count, 5)
Exemple #18
0
    def test_is_graph_connected_method_positive(self):
        n1 = Node()
        n2 = Node()
        n3 = Node()
        n1.add_edges([n2, n3])
        n2.add_edges([n1])
        n3.add_edges([n1])

        n1_graph_connected = ConnectionValidator.is_graph_connected(n1, 3)
        n2_graph_connected = ConnectionValidator.is_graph_connected(n2, 3)
        n3_graph_connected = ConnectionValidator.is_graph_connected(n3, 3)

        self.assertTrue(n1_graph_connected)
        self.assertTrue(n2_graph_connected)
        self.assertTrue(n3_graph_connected)
    def test_permutate_method_with_single_result(self):
        permutator = FastColorPermutator()
        aspiration_criteria = AspirationCriteria(None, None)
        aspiration_criteria.is_permutation_allowed = Mock(return_value=True)
        n1 = Node(color=0, node_id=10)
        n2 = Node(color=0, node_id=20)
        n3 = Node(color=0, node_id=30)
        n1.add_edges([n2])
        n2.add_edges([n1, n3])
        n3.add_edges([n2])

        permutations, best_score = permutator.permutate(n1, [0, 7], aspiration_criteria)

        self.assertEqual(-5, best_score)
        self.assertEqual(1, len(permutations))
        self.assertEqual(n2, permutations[0][0])
        self.assertEqual(7, permutations[0][1])
Exemple #20
0
    def test_permutate_method_with_single_result(self):
        permutator = FastColorPermutator()
        aspiration_criteria = AspirationCriteria(None, None)
        aspiration_criteria.is_permutation_allowed = Mock(return_value=True)
        n1 = Node(color=0, node_id=10)
        n2 = Node(color=0, node_id=20)
        n3 = Node(color=0, node_id=30)
        n1.add_edges([n2])
        n2.add_edges([n1, n3])
        n3.add_edges([n2])

        permutations, best_score = permutator.permutate(
            n1, [0, 7], aspiration_criteria)

        self.assertEqual(-5, best_score)
        self.assertEqual(1, len(permutations))
        self.assertEqual(n2, permutations[0][0])
        self.assertEqual(7, permutations[0][1])
Exemple #21
0
    def test_permutate_method_with_banned_transitions(self):
        n1 = Node(1, 18)
        n2 = Node(2, 23)
        n3 = Node(3, 51)
        n1.add_edges([n2])
        n2.add_edges([n3])
        n3.add_edges([n1])

        permutations = self.color_permutator.permutate(n1, [1, 2, 3],
                                                       [(23, 1), (51, 1)])

        self.assertEqual(4, len(permutations))

        self.assertEqual(2, permutations[0].get_node_of_id(18).color)
        self.assertEqual(1, permutations[0].get_node_of_id(18).previous_color)
        self.assertEqual(2, permutations[0].get_node_of_id(23).color)
        self.assertEqual(2, permutations[0].get_node_of_id(23).previous_color)
        self.assertEqual(3, permutations[0].get_node_of_id(51).color)
        self.assertEqual(3, permutations[0].get_node_of_id(51).previous_color)

        self.assertEqual(3, permutations[1].get_node_of_id(18).color)
        self.assertEqual(1, permutations[1].get_node_of_id(18).previous_color)
        self.assertEqual(2, permutations[1].get_node_of_id(23).color)
        self.assertEqual(2, permutations[1].get_node_of_id(23).previous_color)
        self.assertEqual(3, permutations[1].get_node_of_id(51).color)
        self.assertEqual(3, permutations[1].get_node_of_id(51).previous_color)

        self.assertEqual(1, permutations[2].get_node_of_id(18).color)
        self.assertEqual(1, permutations[2].get_node_of_id(18).previous_color)
        self.assertEqual(3, permutations[2].get_node_of_id(23).color)
        self.assertEqual(2, permutations[2].get_node_of_id(23).previous_color)
        self.assertEqual(3, permutations[2].get_node_of_id(51).color)
        self.assertEqual(3, permutations[2].get_node_of_id(51).previous_color)

        self.assertEqual(1, permutations[3].get_node_of_id(18).color)
        self.assertEqual(1, permutations[3].get_node_of_id(18).previous_color)
        self.assertEqual(2, permutations[3].get_node_of_id(23).color)
        self.assertEqual(2, permutations[3].get_node_of_id(23).previous_color)
        self.assertEqual(2, permutations[3].get_node_of_id(51).color)
        self.assertEqual(3, permutations[3].get_node_of_id(51).previous_color)
    def test_permutate_method_with_banned_transitions(self):
        n1 = Node(1, 18)
        n2 = Node(2, 23)
        n3 = Node(3, 51)
        n1.add_edges([n2])
        n2.add_edges([n3])
        n3.add_edges([n1])

        permutations = self.color_permutator.permutate(n1, [1, 2, 3], [(23, 1), (51, 1)])

        self.assertEqual(4, len(permutations))

        self.assertEqual(2, permutations[0].get_node_of_id(18).color)
        self.assertEqual(1, permutations[0].get_node_of_id(18).previous_color)
        self.assertEqual(2, permutations[0].get_node_of_id(23).color)
        self.assertEqual(2, permutations[0].get_node_of_id(23).previous_color)
        self.assertEqual(3, permutations[0].get_node_of_id(51).color)
        self.assertEqual(3, permutations[0].get_node_of_id(51).previous_color)

        self.assertEqual(3, permutations[1].get_node_of_id(18).color)
        self.assertEqual(1, permutations[1].get_node_of_id(18).previous_color)
        self.assertEqual(2, permutations[1].get_node_of_id(23).color)
        self.assertEqual(2, permutations[1].get_node_of_id(23).previous_color)
        self.assertEqual(3, permutations[1].get_node_of_id(51).color)
        self.assertEqual(3, permutations[1].get_node_of_id(51).previous_color)

        self.assertEqual(1, permutations[2].get_node_of_id(18).color)
        self.assertEqual(1, permutations[2].get_node_of_id(18).previous_color)
        self.assertEqual(3, permutations[2].get_node_of_id(23).color)
        self.assertEqual(2, permutations[2].get_node_of_id(23).previous_color)
        self.assertEqual(3, permutations[2].get_node_of_id(51).color)
        self.assertEqual(3, permutations[2].get_node_of_id(51).previous_color)

        self.assertEqual(1, permutations[3].get_node_of_id(18).color)
        self.assertEqual(1, permutations[3].get_node_of_id(18).previous_color)
        self.assertEqual(2, permutations[3].get_node_of_id(23).color)
        self.assertEqual(2, permutations[3].get_node_of_id(23).previous_color)
        self.assertEqual(2, permutations[3].get_node_of_id(51).color)
        self.assertEqual(3, permutations[3].get_node_of_id(51).previous_color)
Exemple #23
0
    def test_next_method(self):
        n1 = Node('red', 1)
        n2 = Node('green', 2)
        n3 = Node('green', 3)
        n4 = Node('red', 4)
        n5 = Node('green', 5)
        n6 = Node('red', 6)
        n1.add_edges([n2, n3, n6])
        n2.add_edges([n1, n4])
        n3.add_edges([n1, n4])
        n4.add_edges([n2, n3, n5])
        n5.add_edges([n4])
        n6.add_edges([n1])
        iterator = NodeIterator(n1)

        self.assertEqual(n1, iterator.next())
        self.assertEqual(n2, iterator.next())
        self.assertEqual(n4, iterator.next())
        self.assertEqual(n3, iterator.next())
        self.assertEqual(n5, iterator.next())
        self.assertEqual(n6, iterator.next())
        self.assertRaises(StopIteration, iterator.next)
Exemple #24
0
    def test_evaluate_method(self):
        r1 = Node('red')
        r2 = Node('red')
        r3 = Node('red')
        b1 = Node('blue')
        b2 = Node('blue')
        g1 = Node('green')
        g2 = Node('green')
        g3 = Node('green')
        r1.add_edges([g1, r2, b2])
        r2.add_edges([r1, r3, b2])
        r3.add_edges([r2, b1, g2])
        b1.add_edges([r3])
        b2.add_edges([r1, r2, g1, g3])
        g1.add_edges([r1, b2])
        g2.add_edges([r3, g3])
        g3.add_edges([g2, b2])

        evaluated_cost_r1 = CostEvaluator.evaluate(r1,
                                                   ['red', 'blue', 'green'])
        evaluated_cost_g3 = CostEvaluator.evaluate(g3,
                                                   ['blue', 'red', 'green'])

        self.assertEqual(evaluated_cost_r1, evaluated_cost_g3)
        self.assertEqual(-4, evaluated_cost_r1)
Exemple #25
0
    def test_find_permutations_method_emergency_procedure(self):
        search_performer = GraphColoringSearchPerformer(
            StopCriteria(10, 10), 5)
        n1 = Node('red', 12)
        n2 = Node('red', 21)
        n3 = Node('red', 33)
        n4 = Node('red', 34)
        n5 = Node('red', 72)
        search_performer.memory.add_to_memory(n1, 'black')
        search_performer.memory.add_to_memory(n2, 'black')
        search_performer.memory.add_to_memory(n3, 'black')
        search_performer.memory.add_to_memory(n4, 'black')
        search_performer.memory.add_to_memory(n5, 'black')
        n1.add_edges([n2])
        n2.add_edges([n3])
        n3.add_edges([n4])
        n4.add_edges([n5])

        first_permutations = search_performer.find_permutations(
            n1, ['black', 'red'])[0]
        first_node, first_node_color = first_permutations[0]
        first_node.set_color(first_node_color)
        search_performer.memory.add_to_memory(first_node,
                                              first_node.previous_color)
        second_permutations = search_performer.find_permutations(
            first_node, ['black', 'red'])[0]
        second_node, second_node_color = second_permutations[0]
        second_node.set_color(second_node_color)
        search_performer.memory.add_to_memory(second_node,
                                              second_node.previous_color)
        third_permutations = search_performer.find_permutations(
            second_node, ['black', 'red'])[0]
        third_node, third_node_color = third_permutations[0]
        third_node.set_color(third_node_color)
        search_performer.memory.add_to_memory(third_node,
                                              third_node.previous_color)
        fourth_permutations = search_performer.find_permutations(
            third_node, ['black', 'red'])[0]
        fourth_node, fourth_node_color = fourth_permutations[0]
        fourth_node.set_color(fourth_node_color)
        search_performer.memory.add_to_memory(fourth_node,
                                              fourth_node.previous_color)
        fifth_permutations = search_performer.find_permutations(
            fourth_node, ['black', 'red'])[0]
        fifth_node, fifth_node_color = fifth_permutations[0]
        fifth_node.set_color(fifth_node_color)

        self.assertEqual(1, len(first_permutations))
        self.assertEqual(12, first_node.node_id)
        self.assertEqual('black', first_node.color)
        self.assertEqual(1, len(second_permutations))
        self.assertEqual(21, second_node.node_id)
        self.assertEqual('black', second_node.color)
        self.assertEqual(1, len(third_permutations))
        self.assertEqual(33, third_node.node_id)
        self.assertEqual('black', third_node.color)
        self.assertEqual(1, len(fourth_permutations))
        self.assertEqual(34, fourth_node.node_id)
        self.assertEqual('black', fourth_node.color)
        self.assertEqual(1, len(fifth_permutations))
        self.assertEqual(72, fifth_node.node_id)
        self.assertEqual('black', fifth_node.color)
    def test_evaluate_method(self):
        r1 = Node('red')
        r2 = Node('red')
        r3 = Node('red')
        b1 = Node('blue')
        b2 = Node('blue')
        g1 = Node('green')
        g2 = Node('green')
        g3 = Node('green')
        r1.add_edges([g1, r2, b2])
        r2.add_edges([r1, r3, b2])
        r3.add_edges([r2, b1, g2])
        b1.add_edges([r3])
        b2.add_edges([r1, r2, g1, g3])
        g1.add_edges([r1, b2])
        g2.add_edges([r3, g3])
        g3.add_edges([g2, b2])

        evaluated_cost_r1 = CostEvaluator.evaluate(r1, ['red', 'blue', 'green'])
        evaluated_cost_g3 = CostEvaluator.evaluate(g3, ['blue', 'red', 'green'])

        self.assertEqual(evaluated_cost_r1, evaluated_cost_g3)
        self.assertEqual(-4, evaluated_cost_r1)