Пример #1
0
 def from_dict(rule_dict):
     left = Symbol.from_dict(rule_dict['left'])
     right1 = Symbol.from_dict(rule_dict['right1'])
     right2 = None
     if rule_dict['right2'] is not None:
         right2 = Symbol.from_dict(rule_dict['right2'])
     return sRule([left, right1, right2])
Пример #2
0
    def setUp(self):
        self.genetic_selection = _GeneticSelection()

        self.symbol_v = Symbol('x', SymbolType.ST_TERMINAL)
        self.symbol_w = Symbol('w', SymbolType.ST_TERMINAL)
        self.symbol_x = Symbol('x', SymbolType.ST_TERMINAL)
        self.symbol_y = Symbol('y', SymbolType.ST_TERMINAL)
        self.symbol_z = Symbol('z', SymbolType.ST_TERMINAL)

        self.symbol_A = Symbol('A', SymbolType.ST_NON_TERMINAL)
        self.symbol_B = Symbol('B', SymbolType.ST_NON_TERMINAL)
        self.symbol_C = Symbol('C', SymbolType.ST_NON_TERMINAL)
        self.symbol_D = Symbol('D', SymbolType.ST_NON_TERMINAL)
        self.symbol_E = Symbol('E', SymbolType.ST_NON_TERMINAL)

        self.rule_1 = Rule([self.symbol_A, self.symbol_B, self.symbol_C])
        self.rule_2 = Rule([self.symbol_B, self.symbol_x, self.symbol_C])
        self.rule_3 = Rule([self.symbol_C, self.symbol_B, self.symbol_y])
        self.rule_4 = Rule([self.symbol_D, self.symbol_D, self.symbol_C])
        self.rule_5 = Rule([self.symbol_E, self.symbol_w])

        self.rule_1.fitness = 9
        self.rule_2.fitness = 12
        self.rule_3.fitness = 15
        self.rule_4.fitness = 6
        self.rule_5.fitness = 3

        self.rules = {self.rule_1, self.rule_2, self.rule_3, self.rule_4, self.rule_5}
        self.rules_list = [self.rule_1, self.rule_2, self.rule_3, self.rule_4, self.rule_5]
Пример #3
0
 def setUp(self):
     self.symbols = [
         Symbol("A", SymbolType.ST_TERMINAL),
         Symbol("B", SymbolType.ST_UNIVERSAL),
         Symbol("C", SymbolType.ST_NON_TERMINAL),
         Symbol("D", SymbolType.ST_START)
     ]
Пример #4
0
    def setUp(self):
        iteration = Iteration()
        self.crowding = StandardCrowding()
        self.crowding.set_iteration(iteration)
        self.covering = NakamuraCovering(self.crowding)
        self.covering.set_iteration(iteration)
        self.symbol_v = Symbol('x', SymbolType.ST_TERMINAL)
        self.symbol_w = Symbol('w', SymbolType.ST_TERMINAL)
        self.symbol_x = Symbol('x', SymbolType.ST_TERMINAL)
        self.symbol_y = Symbol('y', SymbolType.ST_TERMINAL)
        self.symbol_z = Symbol('z', SymbolType.ST_TERMINAL)

        self.symbol_A = Symbol('A', SymbolType.ST_NON_TERMINAL)
        self.symbol_B = Symbol('B', SymbolType.ST_NON_TERMINAL)
        self.symbol_C = Symbol('C', SymbolType.ST_NON_TERMINAL)
        self.symbol_D = Symbol('D', SymbolType.ST_NON_TERMINAL)
        self.symbol_E = Symbol('E', SymbolType.ST_NON_TERMINAL)

        self.rule_1 = Rule([self.symbol_A, self.symbol_B, self.symbol_C])
        self.rule_2 = Rule([self.symbol_B, self.symbol_x, self.symbol_C])
        self.rule_3 = Rule([self.symbol_C, self.symbol_B, self.symbol_y])
        self.rule_4 = Rule([self.symbol_D, self.symbol_D, self.symbol_C])
        self.rule_5 = Rule([self.symbol_E, self.symbol_w])
        self.rule_6 = Rule([self.symbol_E, self.symbol_D])

        self.rules = [
            self.rule_1, self.rule_2, self.rule_3, self.rule_4, self.rule_5,
            self.rule_6
        ]
Пример #5
0
 def setUp(self):
     iteration = Iteration()
     self.covering = StartStandardCovering()
     self.covering.set_iteration(iteration)
     self.grammar = Grammar()
     self.first_right_symbol = Symbol('a', SymbolType.ST_TERMINAL)
     self.left_symbol = Symbol('x', SymbolType.ST_TERMINAL)
     self.rule = Rule([self.left_symbol, self.first_right_symbol])
Пример #6
0
 def __create_rule(symbols, fitness: float = None) -> Rule:
     symbols = [Symbol(symbols[0], SymbolType.ST_NON_TERMINAL),
                Symbol(symbols[1], SymbolType.ST_TERMINAL),
                Symbol(symbols[2], SymbolType.ST_TERMINAL)]
     rule = Rule(symbols)
     if fitness:
         rule.fitness = fitness
     return rule
Пример #7
0
 def setUp(self):
     iteration = Iteration()
     self.covering = StartCoveringPlus()
     self.covering.set_iteration(iteration)
     self.grammar = Grammar()
     self.first_right_symbol = Symbol('a', SymbolType.ST_TERMINAL)
     self.left_symbol = Symbol('x', SymbolType.ST_TERMINAL)
     self.rule = sRule.from_symbols(0.5, self.left_symbol,
                                    self.first_right_symbol)
Пример #8
0
 def __create_terminal_symbols__(self):
     terminal_symbols = []
     symbol_one = Symbol("o", SymbolType.ST_TERMINAL)
     symbol_two = Symbol("t", SymbolType.ST_TERMINAL)
     symbol_three = Symbol("s", SymbolType.ST_TERMINAL)
     terminal_symbols.append(symbol_one)
     terminal_symbols.append(symbol_two)
     terminal_symbols.append(symbol_three)
     return terminal_symbols
Пример #9
0
 def __create_non_terminal_symbols(self):
     non_terminal_symbols = []
     symbol_one = Symbol("a", SymbolType.ST_NON_TERMINAL)
     symbol_two = Symbol("b", SymbolType.ST_NON_TERMINAL)
     symbol_three = Symbol("c", SymbolType.ST_NON_TERMINAL)
     non_terminal_symbols.append(symbol_one)
     non_terminal_symbols.append(symbol_two)
     non_terminal_symbols.append(symbol_three)
     return non_terminal_symbols
Пример #10
0
 def setUp(self):
     self.roulette_selection = RouletteSelection()
     self.symbol_a = Symbol('a', SymbolType.ST_TERMINAL)
     self.symbol_b = Symbol('b', SymbolType.ST_TERMINAL)
     self.symbol_c = Symbol('c', SymbolType.ST_TERMINAL)
     self.symbol_d = Symbol('d', SymbolType.ST_TERMINAL)
     self.symbol_e = Symbol('e', SymbolType.ST_TERMINAL)
     self.wheel_sections = [45, 30, 18, 9, 3]
     self.symbol_statistics = [(self.symbol_a, 15), (self.symbol_b, 12), (self.symbol_c, 9), (self.symbol_d, 6),
                               (self.symbol_e, 3)]
Пример #11
0
    def test_filter_non_terminal_to_terminal_terminal_rule(self):
        symbols = [Symbol('x', SymbolType.ST_TERMINAL),
                   Symbol('y', SymbolType.ST_NON_TERMINAL),
                   Symbol('z', SymbolType.ST_NON_TERMINAL)]
        rule = Rule(symbols)

        result = self.crowding.filter_non_terminal_to_terminal_terminal_rule(self.rules)
        self.assertEqual(result, set())

        result = self.crowding.filter_non_terminal_to_terminal_terminal_rule(self.rules + [rule])
        self.assertEqual(result, {rule})
    def setUp(self):
        iteration = Iteration()
        self.crowding = StandardCrowding()
        self.crowding.set_iteration(iteration)
        self.covering = AggressiveNakamuraCovering(self.crowding)
        self.covering.set_iteration(iteration)

        self.symbol_A = Symbol('A', SymbolType.ST_NON_TERMINAL)
        self.symbol_B = Symbol('B', SymbolType.ST_NON_TERMINAL)
        self.symbol_C = Symbol('C', SymbolType.ST_NON_TERMINAL)

        self.rule_1 = Rule([self.symbol_A, self.symbol_B, self.symbol_C])
Пример #13
0
 def setUp(self):
     iteration = Iteration()
     self.crowding = Crowding()
     self.crowding.set_iteration(iteration)
     self.covering = FinalCoveringPlus(self.crowding)
     self.covering.set_iteration(iteration)
     self.grammar = Grammar()
     self.first_right_symbol = Symbol('a', SymbolType.ST_TERMINAL)
     self.second_right_symbol = Symbol('b', SymbolType.ST_TERMINAL)
     self.left_symbol = Symbol('x', SymbolType.ST_TERMINAL)
     self.rule = sRule.from_symbols(0.5, self.left_symbol,
                                    self.first_right_symbol,
                                    self.second_right_symbol)
Пример #14
0
 def setUp(self):
     iteration = Iteration()
     self.crowding = Crowding()
     self.crowding.set_iteration(iteration)
     self.covering = AggressiveStandardCovering(self.crowding)
     self.covering.set_iteration(iteration)
     self.grammar = Grammar()
     self.first_right_symbol = Symbol('a', SymbolType.ST_TERMINAL)
     self.second_right_symbol = Symbol('b', SymbolType.ST_TERMINAL)
     self.left_symbol = Symbol('x', SymbolType.ST_TERMINAL)
     self.rule = Rule([
         self.left_symbol, self.first_right_symbol, self.second_right_symbol
     ])
    def setUp(self):
        iteration = Iteration()
        self.crowding = StandardCrowding()
        self.crowding.set_iteration(iteration)
        self.covering = AggressiveSmartCoveringWithTabu(self.crowding)
        self.covering.set_iteration(iteration)

        self.symbol_A = Symbol('A', SymbolType.ST_NON_TERMINAL)
        self.symbol_B = Symbol('B', SymbolType.ST_NON_TERMINAL)
        self.symbol_C = Symbol('C', SymbolType.ST_NON_TERMINAL)
        self.symbol_D = Symbol('D', SymbolType.ST_NON_TERMINAL)
        self.symbol_E = Symbol('E', SymbolType.ST_NON_TERMINAL)

        self.statistics = {self.symbol_A: 3, self.symbol_B: 7}
Пример #16
0
    def test_get_random_nonterminal_symbol_from(self):
        grammar = Grammar()
        symbol_1 = Symbol('a', SymbolType.ST_TERMINAL)
        symbol_2 = Symbol('b', SymbolType.ST_TERMINAL)

        grammar.nonTerminalSymbols = [symbol_1, symbol_2]
        result = RandomUtils.get_random_nonterminal_symbol_from(grammar)
        self.assertIsNotNone(result)
        self.assertEqual(2, len(grammar.nonTerminalSymbols))

        grammar.nonTerminalSymbols = []
        result = RandomUtils.get_random_nonterminal_symbol_from(grammar)
        self.assertIsNone(result)

        grammar.nonTerminalSymbols = [symbol_1, symbol_2]
        random.choice = MagicMock(return_value=symbol_1)
        result = RandomUtils.get_random_nonterminal_symbol_from(grammar)
        self.assertEqual(result, symbol_1)
Пример #17
0
    def setUp(self):
        self.genetic_algorithm = GeneticAlgorithm(Crowding(), None)
        self.grammar = Grammar()

        self.symbol_v = Symbol('x', SymbolType.ST_TERMINAL)
        self.symbol_w = Symbol('w', SymbolType.ST_TERMINAL)
        self.symbol_x = Symbol('x', SymbolType.ST_TERMINAL)
        self.symbol_y = Symbol('y', SymbolType.ST_TERMINAL)
        self.symbol_z = Symbol('z', SymbolType.ST_TERMINAL)

        self.symbol_A = Symbol('A', SymbolType.ST_NON_TERMINAL)
        self.symbol_B = Symbol('B', SymbolType.ST_NON_TERMINAL)
        self.symbol_C = Symbol('C', SymbolType.ST_NON_TERMINAL)
        self.symbol_D = Symbol('D', SymbolType.ST_NON_TERMINAL)
        self.symbol_E = Symbol('E', SymbolType.ST_NON_TERMINAL)

        self.rule_1 = sRule.from_symbols(0.1, self.symbol_A, self.symbol_B,
                                         self.symbol_C)
        self.rule_2 = sRule.from_symbols(0.5, self.symbol_B, self.symbol_x,
                                         self.symbol_C)
        self.rule_3 = sRule.from_symbols(0.4, self.symbol_C, self.symbol_B,
                                         self.symbol_y)
        self.rule_4 = sRule.from_symbols(0.9, self.symbol_D, self.symbol_D,
                                         self.symbol_C)
        self.rule_5 = sRule.from_symbols(0.2, self.symbol_E, self.symbol_w)

        self.rule_1.fitness = 9
        self.rule_2.fitness = 12
        self.rule_3.fitness = 15
        self.rule_4.fitness = 6
        self.rule_5.fitness = 3

        self.rules = {
            self.rule_1, self.rule_2, self.rule_3, self.rule_4, self.rule_5
        }
        self.rules_list = [
            self.rule_1, self.rule_2, self.rule_3, self.rule_4, self.rule_5
        ]
        self.grammar.get_non_terminal_rules = MagicMock(
            return_value=self.rules)
        self.random_decision = RandomUtils.make_random_decision_with_probability
        self.random_non_terminal = RandomUtils.get_random_nonterminal_symbol_from
Пример #18
0
    def test_symbol_sentence_init(self):
        symbol1 = Symbol("I")
        symbol2 = Symbol(" ")
        symbol3 = Symbol("l")
        symbol4 = Symbol("i")
        symbol5 = Symbol("k")
        symbol6 = Symbol("e")

        symbols = [symbol1, symbol2, symbol3, symbol4, symbol5, symbol6]
        sentence = "I like you"

        grammar = Grammar()
        grammar.nonTerminalSymbols = symbols
        self.cyk_base = CYKBase()
        self.cyk_base.grammar = grammar
        self.cyk_base.symbols = symbols
        self.cyk_base._init_symbol_sequence(sentence)

        sequence = self.cyk_base.sequence
        self.assertEqual(symbol1, sequence[0])
        self.assertEqual(symbol2, sequence[1])
        self.assertEqual(symbol3, sequence[2])
        self.assertEqual(symbol4, sequence[3])
        self.assertEqual(symbol5, sequence[4])
        self.assertEqual(symbol6, sequence[5])
        self.assertEqual(symbol2, sequence[6])
        self.assertEqual(None, sequence[7])
        self.assertEqual(None, sequence[8])
        self.assertEqual(None, sequence[9])
        pass
Пример #19
0
 def __create_non_terminal_symbols(self):
     return [
         Symbol('a', SymbolType.ST_NON_TERMINAL),
         Symbol('b', SymbolType.ST_NON_TERMINAL),
         Symbol('c', SymbolType.ST_NON_TERMINAL),
         Symbol('d', SymbolType.ST_NON_TERMINAL),
         Symbol('e', SymbolType.ST_NON_TERMINAL),
         Symbol('f', SymbolType.ST_NON_TERMINAL),
     ]
Пример #20
0
 def test_find_symbol_by_value(self):
     value = 'c'
     symbol = self.grammar.find_symbol_by_value(value)
     self.assertEqual(symbol, Symbol("c", SymbolType.ST_NON_TERMINAL))
Пример #21
0
 def test_should_not_find_non_terminal_symbol_index(self):
     symbol = Symbol("d", SymbolType.ST_NON_TERMINAL)
     index = self.grammar.find_non_terminal_symbol_index(symbol)
     self.assertEqual(index, -1)
Пример #22
0
 def test_should_find_symbol_by_index_5(self):
     index = 5
     symbol = self.grammar.find_symbol_by_given_index(index)
     self.assertEqual(symbol, Symbol("c", SymbolType.ST_NON_TERMINAL))
Пример #23
0
 def test_should_find_third_non_terminal_symbol(self):
     symbol = Symbol("c")
     symbol_idx = self.grammar.symbol_index(symbol)
     self.assertEqual(symbol_idx, 5)
Пример #24
0
class TestSymbol(unittest.TestCase):
    def setUp(self):
        self.symbol = Symbol()

    def test_is_terminal(self):
        self.symbol.symbol_type = SymbolType.ST_TERMINAL
        self.assertTrue(self.symbol.is_terminal())

    def test_is_terminal_failure(self):
        self.symbol.symbol_type = SymbolType.ST_UNIVERSAL
        self.assertFalse(self.symbol.is_terminal())

    def test_is_non_terminal(self):
        self.symbol.symbol_type = SymbolType.ST_NON_TERMINAL
        self.assertTrue(self.symbol.is_non_terminal())

    def test_is_non_terminal_failure(self):
        self.symbol.symbol_type = SymbolType.ST_TERMINAL
        self.assertFalse(self.symbol.is_non_terminal())

    def test_is_start(self):
        self.symbol.symbol_type = SymbolType.ST_START
        self.assertTrue(self.symbol.is_start())

    def test_is_start_failure(self):
        self.symbol.symbol_type = SymbolType.ST_TERMINAL
        self.assertFalse(self.symbol.is_start())

    def test_is_universal(self):
        self.symbol.symbol_type = SymbolType.ST_UNIVERSAL
        self.assertTrue(self.symbol.is_universal())

    def test_is_universal_failure(self):
        self.symbol.symbol_type = SymbolType.ST_TERMINAL
        self.assertFalse(self.symbol.is_universal())

    def test_two_symbols_equality(self):
        self.symbol.symbol_type = SymbolType.ST_TERMINAL
        self.symbol.value = "a"
        other_symbol = Symbol("a", SymbolType.ST_TERMINAL)
        self.assertEqual(self.symbol, other_symbol)

    def test_two_symbols_not_equal(self):
        self.symbol.symbol_type = SymbolType.ST_TERMINAL
        self.symbol.value = "a"
        other_symbol = Symbol("c", SymbolType.ST_UNIVERSAL)
        self.assertNotEqual(self.symbol, other_symbol)

    def test_two_symbols_not_equal_different_types(self):
        self.symbol.symbol_type = SymbolType.ST_TERMINAL
        self.symbol.value = "a"
        other_symbol = Symbol("a", SymbolType.ST_NON_TERMINAL)
        self.assertNotEqual(self.symbol, other_symbol)

    def test_two_symbols_not_equal_different_values(self):
        self.symbol.symbol_type = SymbolType.ST_TERMINAL
        self.symbol.value = "a"
        other_symbol = Symbol("b", SymbolType.ST_TERMINAL)
        self.assertNotEqual(self.symbol, other_symbol)

    def test_conversion_to_string(self):
        self.symbol.symbol_type = SymbolType.ST_TERMINAL
        self.symbol.value = "a"
        self.assertEqual(str(self.symbol), "a")
Пример #25
0
 def test_two_symbols_not_equal_different_values(self):
     self.symbol.symbol_type = SymbolType.ST_TERMINAL
     self.symbol.value = "a"
     other_symbol = Symbol("b", SymbolType.ST_TERMINAL)
     self.assertNotEqual(self.symbol, other_symbol)
Пример #26
0
 def test_should_find_second_terminal_symbol(self):
     symbol = Symbol("t")
     symbol_idx = self.grammar.symbol_index(symbol)
     self.assertEqual(symbol_idx, 1)
Пример #27
0
 def test_should_not_find_symbol_index(self):
     symbol = Symbol("d")
     symbol_idx = self.grammar.symbol_index(symbol)
     self.assertEqual(symbol_idx, -1)
Пример #28
0
 def setUp(self):
     self.symbol = Symbol()
Пример #29
0
 def setUp(self):
     self.left = Symbol("S", SymbolType.ST_START)
     self.rightTerminal = Symbol("R", SymbolType.ST_TERMINAL)
     self.leftTerminal = Symbol("L", SymbolType.ST_TERMINAL)
     self.leftNonTerminal = Symbol("L", SymbolType.ST_NON_TERMINAL)
     self.rightNonTerminal = Symbol("R", SymbolType.ST_NON_TERMINAL)
Пример #30
0
    def setUp(self):
        settings = MagicMock()
        settings.get_value = MagicMock(
            side_effect=["TERMINALS", 0.5, 1.0, 1.0, 1.0, 1.0])
        self.grammar = Grammar(settings)

        self.symbol_a = Symbol('a', SymbolType.ST_TERMINAL)

        self.symbol_S = Symbol('S', SymbolType.ST_NON_TERMINAL)
        self.symbol_A = Symbol('A', SymbolType.ST_NON_TERMINAL)
        self.symbol_B = Symbol('B', SymbolType.ST_NON_TERMINAL)
        self.symbol_C = Symbol('A', SymbolType.ST_NON_TERMINAL)
        self.symbol_A1 = Symbol('A1', SymbolType.ST_NON_TERMINAL)
        self.symbol_A2 = Symbol('A2', SymbolType.ST_NON_TERMINAL)

        self.rule_1 = sRule.from_symbols(0.1, self.symbol_S, self.symbol_A,
                                         self.symbol_B)
        self.rule_2 = sRule.from_symbols(0.5, self.symbol_A, self.symbol_A,
                                         self.symbol_B)
        self.rule_3 = sRule.from_symbols(0.4, self.symbol_A, self.symbol_a)
        self.rule_4 = sRule.from_symbols(0.9, self.symbol_B, self.symbol_B,
                                         self.symbol_B)
        self.rule_5 = sRule.from_symbols(0.2, self.symbol_B, self.symbol_a)

        self.rules = {
            self.rule_1, self.rule_2, self.rule_3, self.rule_4, self.rule_5
        }
        self.non_terminal_rules = {self.rule_1, self.rule_2, self.rule_4}
        self.terminal_rules = {self.rule_3, self.rule_5}
        self.grammar.rulesContainer.terminal_rules = self.terminal_rules
        self.grammar.rulesContainer.non_terminal_rules = self.non_terminal_rules
        self.grammar.rulesContainer.rules = self.rules

        self.grammar.get_rules = MagicMock(return_value=self.rules)
        self.grammar.get_non_terminal_rules = MagicMock(
            return_value=self.non_terminal_rules)

        settings.get_value = MagicMock(
            side_effect=['RANDOM', 'False', 0.5, 20])
        self.split_and_merge = SplitAndMerge(settings)
        self.split_and_merge.iteration.add_rule = MagicMock()
        self.split_and_merge.iteration.remove_crowding_rule = MagicMock()

        self.merge_result = {
            sRule.from_symbols(0.1, self.symbol_S, self.symbol_A,
                               self.symbol_A),
            sRule.from_symbols(0.1, self.symbol_A, self.symbol_A,
                               self.symbol_A),
            sRule.from_symbols(0.1, self.symbol_A, self.symbol_a)
        }

        self.split_result = {
            sRule.from_symbols(0.1, self.symbol_S, self.symbol_A1,
                               self.symbol_B),
            sRule.from_symbols(0.1, self.symbol_S, self.symbol_A2,
                               self.symbol_B),
            sRule.from_symbols(0.1, self.symbol_A1, self.symbol_A1,
                               self.symbol_B),
            sRule.from_symbols(0.1, self.symbol_A1, self.symbol_A2,
                               self.symbol_B),
            sRule.from_symbols(0.1, self.symbol_A2, self.symbol_A2,
                               self.symbol_B),
            sRule.from_symbols(0.1, self.symbol_A2, self.symbol_A1,
                               self.symbol_B),
            sRule.from_symbols(0.1, self.symbol_A1, self.symbol_a),
            sRule.from_symbols(0.1, self.symbol_A2, self.symbol_a),
            sRule.from_symbols(0.1, self.symbol_B, self.symbol_a),
            sRule.from_symbols(0.1, self.symbol_B, self.symbol_B,
                               self.symbol_B),
        }