Exemple #1
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
        ]
Exemple #2
0
 def benchmark_run_testing_threshold(self):
     self.learning_mode = False
     self.learning_mode_off()
     self.grammar_induction(Iteration(), True)
     self.fill_results()
     self.learning_mode = True
     return self.last_results
 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])
Exemple #4
0
 def init_crowding_and_covering(self, grammar: sGCSGrammar):
     self.crowding = StandardCrowding(self.__settings)
     self.final_covering = CoveringDeterminer.get_final_covering(
         self.__settings, self.crowding)
     self.terminal_covering = CoveringDeterminer.get_terminal_covering(
         self.__settings, self.crowding)
     self.aggressive_covering = CoveringDeterminer.get_aggressive_covering(
         self.__settings, self.crowding)
     self.start_covering = CoveringDeterminer.get_start_covering(
         self.__settings, self.crowding)
     self.iteration = Iteration()
     self.iteration.add_rules(grammar.get_rules())
     self.crowding.iteration = self.iteration
     self.final_covering.iteration = self.iteration
     self.terminal_covering.iteration = self.iteration
     self.aggressive_covering.iteration = self.iteration
     self.start_covering.iteration = self.iteration
Exemple #5
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)
Exemple #6
0
 def __init__(self, crowding: Crowding = None, settings=None):
     self.logger = logging.getLogger(self.__class__.__name__)
     self.crowding = crowding
     self.settings = settings
     self.iteration: Iteration = Iteration()
     self.first_report_rule: ReportRule = None
     self.second_report_rule: ReportRule = None
     self.__last_grammar_fitness: float = -1.0
     self.__last_rules: Set[Rule] = None
    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])
Exemple #8
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)
Exemple #9
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}
Exemple #11
0
 def benchmark_run(self, test=False):
     self.__logger.info("Running benchmark")
     # print("Running benchmark")
     self.learning_mode_off()
     self.grammar_induction(Iteration(), benchmark=True, test=test)
     last_fitness: float = self.last_results.fitness if self.last_results is not None else 0.0
     fitness_diff = last_fitness - self.last_results.fitness
     self.fill_results()
     if type(self.grammar) is sGCSGrammar:
         if 0 < fitness_diff < self.io_grammar_difference_stop:
             self.grammar.new_ones_only = True
         else:
             self.grammar.new_ones_only = False
     self.learning_mode_on()
     self.__logger.info("Finishing benchmark")
     return self.last_results
Exemple #12
0
 def remove_worst_rule_by_reversed_roulette(self, current_iteration: Iteration):
     rule_to_remove = self.grammar.rulesContainer.get_rule_to_remove_by_reversed_roulette()
     self.__logger.info("De_lock rule to remove = {0}".format(rule_to_remove))
     current_iteration.remove_selective_de_lock_rule(rule_to_remove)
     self.grammar.remove_rule(rule_to_remove)
Exemple #13
0
 def evaluate_grammar_and_save_results_to_iteration(self, iteration: Iteration):
     iteration.results = self.benchmark_run(test=False)
     # iteration.result_map = self.result_map
     self.__logger.info("Filling report rules")
     iteration.fill_report_rules()
Exemple #14
0
    def process(self, collect_data, widget_process):
        #random.seed(23)
        #self.reset_grammar()
        max_step = int(self.settings.get_value("general", "max_evolutionary_steps"))
        ev_step = 0
        widget_process.max = max_step
        widget_process.description = "Calculating {}/{}".format(ev_step, max_step)
        stop_condition = False
        self.learning_mode = True
        sim_result = Result()
        self.__logger.info("Start elite number = " + str(self.settings.get_value("crowding", "elite_rules_number")))

        self.ga.reset()
        # main loop
        while not stop_condition:
            # print("************************************************************************************")
            # print("Induction step {0} of {1} ({2}%)".format(ev_step, max_step, round(ev_step/max_step*100)))
            iteration = Iteration()
            iteration.add_rules(list(self.grammar.get_rules()))
            self.set_iteration(iteration)
            start_time = time.time()

            # Genetic algorithm
            if self.settings.get_value("genetic_algorithm", "is_ga_allowed") == "True" and \
                            len(self.grammar.rulesContainer.non_terminal_rules) > 0:
                # print("[process] Running GA")
                self.ga.run(self.grammar)
                self.__logger.info("[process] Refreshing rules")
                self.grammar.correct_grammar()

            # Grammar induction
            self.__logger.info("[process] grammar induction start, step " + str(ev_step + 1))
            self.__logger.info("Number of rules in grammar: {0} total = {1} terminal + {2} nonterminal ({3} aaa)"
                               .format(len(self.grammar.get_rules()),
                                       len(self.grammar.get_terminal_rules()),
                                       len(self.grammar.get_non_terminal_rules()),
                                       self.grammar.rulesContainer.count_aaa_rules()))
            self.grammar_induction(iteration)
            self.__logger.info("[process] grammar induction ended " + str(ev_step + 1))

            self.grammar.rulesContainer.make_rules_older()

            if self.settings.get_value('genetic_algorithm', 'grammar_restoring_enabled') == "True":
                self.grammar.rulesContainer.reset_usages_and_points()
                self.parse_dataset(self.train_data, covering_on=False)
                self.refresh_rules_params(benchmark=True)
                self.ga.restore_if_necessary(self.grammar)

            # Saving results
            self.__logger.info("Evaluating grammar")
            self.evaluate_grammar_and_save_results_to_iteration(iteration)
            self.__logger.info("Finished evaluating grammar")
            # print(self.grammar)

            if self.settings.get_value("general", "allow_adaptive_elitism") == "True":
                self.adjust_elite_rules_number(iteration)

            """
            # TODO - w oryginale tutaj jest obiekt MySettings, wszędzie indziej workingCopySettings
            if self.settings.get_value("general", "allow_lock_removal_algorithm") == "True" and \
                    self.handle_lock_if_occurred(sim_result.get_last_iteration(), iteration):
                self.evaluate_grammar_and_save_results_to_iteration(iteration)
            """

            iteration.set_final_production_number(len(self.grammar.rulesContainer.terminal_rules),
                                                  len(self.grammar.rulesContainer.non_terminal_rules),
                                                  self.grammar.rulesContainer.count_aaa_rules(),
                                                  self.grammar.rulesContainer.terminal_rules,
                                                  self.grammar.rulesContainer.non_terminal_rules)

            # Finalizing
            ev_step += 1
            widget_process.value = ev_step
            if self.on_step_ended is not None:
                self.on_step_ended(ev_step, int(self.settings.get_value("general", "max_evolutionary_steps")))

            if collect_data:
                if self.settings.get_value("general", "pickle_on") == "True":
                    pickled_iteration = pickle.loads(pickle.dumps(iteration, -1))
                else:
                    pickled_iteration = iteration
                sim_result.add_iteration(pickled_iteration)

            # Checking for stop condition
            met = self.grammar.calc_metrics()
            Sens = met["Sensitivity"]
            Spec = met["Specificity"]
            stop_condition = (ev_step == int(self.settings.get_value("general", "max_evolutionary_steps")) or
                              self.settings.get_value("general",
                                                      "is_perfectly_fit_stop_condition_allowed") == "True" and
                              self.grammar.is_grammar_perfectly_fit(len(self.train_data)) or Sens > 0.9 and Spec > 0.9)
            self.__logger.info('Stop condition: {0}'.format(str(stop_condition)))

            end_time = time.time()
            self.__logger.info("[process] Induction step ended. Elapsed time: " + str(end_time - start_time) +
                               " step: " + str(ev_step))
            self.__logger.info("[process] True Positives = {0}, False Negatives = {1}, True Negatives = {2},"
                               "False Positives = {3}".format(self.grammar.truePositive, self.grammar.falseNegative,
                                                              self.grammar.trueNegative, self.grammar.falsePositive))
            widget_process.description = "Calculating {}/{}:".format(ev_step, max_step)
        widget_process.description = "Done {}/{}".format(max_step, max_step)
        widget_process.bar_style = "success"
        if self.settings.get_value("general", "remove_grammar_unused_rules_after_learning") == "True":
            self.grammar.remove_unused_rules_and_symbols()

        self.grammar.correct_grammar()
        if isinstance(self.grammar, sGCSGrammar):
            self.normalize_grammar()

        sim_result.final_grammar = self.grammar
        sim_result.settings = self.settings

        if self.on_iteration_ended is not None:
            self.on_iteration_ended(self.last_results, 1, 1)
        if self.on_learning_ended is not None:
            self.on_learning_ended(self.last_results)
        final_rules = list(self.grammar.get_rules())
        final_rules.sort(key=lambda x: str(x.left), reverse=True)
        self.benchmark_run(test=True)

        # print("Final rules")
        # for r in final_rules:
        #     print("{}, {}".format(r.short(), round(r.probability, 2)))
        #
        # print("Evolutionary steps = {}".format(ev_step))
        return sim_result, final_rules

        print("Evolutionary steps = {}".format(ev_step))
        return sim_result
Exemple #15
0
class ScykController:
    def __init__(self, settings: Settings = None):
        self.__settings = settings
        self.crowding = None
        self.final_covering = None
        self.terminal_covering = None
        self.aggressive_covering = None
        self.start_covering = None
        self.iteration = None

    def run_benchmark(self):
        iterations = 10
        self.empty_grammar_tests_with_learning(iterations)

    def empty_grammar_tests_with_learning(self, iterations):
        test_data_list = self.__settings.get_value(
            "general", "parallel_test_set_path").split(",")
        learning_on = False
        seq_times = []
        par_times = []
        par_ladder_times = []
        par_ordered_jobs_times = []

        for test_data in test_data_list:
            abbading_format_loader = AbbadingoFormatLoader()
            abbading_format_loader.load(test_data)
            test_data = abbading_format_loader.input_data
            grammar = sGCSGrammar(self.__settings)
            grammar.init_grammar(test_data)
            self.init_crowding_and_covering(grammar)

            # print('Starting sequential scyk testing')
            for i in range(iterations):
                self.benchmark_sequential_scyk(grammar, test_data, learning_on,
                                               seq_times)
            # print('Finished sequential scyk testing')

            # print('Starting parallel scyk testing')
            # for i in range(iterations):
            #     self.benchmark_parallel_scyk(grammar, test_data, self.iteration, learning_on, par_times)
            # print('Finished parallel scyk testing')
            #
            # print('Starting parallel scyk ladder testing')
            # for i in range(iterations):
            #     self.benchmark_parallel_scyk_ladder(grammar, test_data, self.iteration, learning_on, par_ladder_times)
            # print('Finished parallel scyk ladder testing')

            # print('Starting parallel scyk ordered jobs testing')
            for i in range(iterations):
                self.benchmark_parallel_scyk_ordered_jobs(
                    grammar, test_data, self.iteration, learning_on,
                    par_ordered_jobs_times)
            # print('Finished parallel scyk scyk ordered jobs testing')

            seq_dict = self.benchmark_sequential_scyk_with_dict_result(
                grammar, test_data, learning_on, iterations)

            # print('Starting parallel scyk dictionary generation')
            # par_dict = self.benchmark_parallel_scyk_with_dict_result(grammar, test_data, self.iteration, learning_on,
            #                                                          iterations)
            # print('Finished parallel scyk dictionary generation')
            #
            # print('Starting parallel scyk ladder dictionary generation')
            # par_ladder_dict = self.benchmark_parallel_ladder_scyk_with_dict_result(grammar, test_data, self.iteration,
            #                                                                        learning_on,
            #                                                                        iterations)
            # print('Finished parallel scyk ladder dictionary generation')

            # print('Starting parallel scyk ordered jobs dictionary generation')
            par_ordered_jobs_dict = self.benchmark_parallel_ordered_scyk_with_dict_result(
                grammar, test_data, self.iteration, learning_on, iterations)
            # print('Finished parallel scyk ordered jobs dictionary generation')

            with open("results_seq_lon", "w") as f:
                f.write(str(seq_times))

            with open("results_par_lon", "w") as f:
                f.write(str(par_times))

            with open("results_par_ladder_lon", "w") as f:
                f.write(str(par_ladder_times))

            with open("results_par_ordered_jobs_lon", "w") as f:
                f.write(str(par_ordered_jobs_times))

            with open("results_seq_lon_dict", "w") as f:
                f.write(str(seq_dict))

            # with open("results_par_lon_dict", "w") as f:
            #     f.write(str(par_dict))
            #
            # with open("results_par_ladder_lon_dict", "w") as f:
            #     f.write(str(par_ladder_dict))

            with open("results_par_ordered_jobs_lon_dict", "w") as f:
                f.write(str(par_ordered_jobs_dict))

    def benchmark_sequential_scyk(self, grammar: sGCSGrammar, test_data,
                                  learning_on, seq_times):
        scyk = SGCSCyk(grammar, None, self.__settings, self.start_covering,
                       self.final_covering, self.aggressive_covering,
                       self.terminal_covering)
        for example in test_data:
            start_time = time.time()
            scyk.cyk_result(example.sequence, grammar, example.positive,
                            learning_on)
            end_time = time.time()
            seq_times.append(str(end_time - start_time))

    def benchmark_parallel_scyk(self, grammar: sGCSGrammar, test_data,
                                iteration, learning_on, par_times):
        for example in test_data:
            start_time = time.time()
            cyk_result(example.sequence, grammar, example.positive,
                       learning_on, self.__settings, self.crowding, iteration)
            end_time = time.time()
            par_times.append(str(end_time - start_time))

    def benchmark_parallel_scyk_ladder(self, grammar: sGCSGrammar, test_data,
                                       iteration, learning_on,
                                       par_ladder_times):
        for example in test_data:
            start_time = time.time()
            cyk_result_ladder(example.sequence, grammar, example.positive,
                              learning_on, self.__settings, self.crowding,
                              iteration)
            end_time = time.time()
            par_ladder_times.append(str(end_time - start_time))

    def benchmark_sequential_scyk_with_dict_result(self, grammar: sGCSGrammar,
                                                   test_data, learning_on,
                                                   iterations):
        scyk = SGCSCyk(grammar, None, self.__settings, self.start_covering,
                       self.final_covering, self.aggressive_covering,
                       self.terminal_covering)
        seq_example_dictionary = dict()
        for example in test_data:
            start_time = time.time()
            for iteration in range(iterations):
                scyk.cyk_result(example.sequence, grammar, example.positive,
                                learning_on)
            end_time = time.time()
            seq_example_dictionary[example.sequence] = str(end_time -
                                                           start_time)
        return seq_example_dictionary

    def benchmark_parallel_scyk_ordered_jobs(self, grammar: sGCSGrammar,
                                             test_data, iteration, learning_on,
                                             par_ordered_times):
        for example in test_data:
            start_time = time.time()
            cyk_result_ordered_jobs(example.sequence, grammar,
                                    example.positive, learning_on,
                                    self.__settings, self.crowding, iteration)
            end_time = time.time()
            par_ordered_times.append(str(end_time - start_time))

    def benchmark_parallel_ordered_scyk_with_dict_result(
            self, grammar: sGCSGrammar, test_data, iteration, learning_on,
            iterations):
        par_example_dictionary = dict()
        for example in test_data:
            start_time = time.time()
            for i in range(iterations):
                cyk_result_ordered_jobs(example.sequence, grammar,
                                        example.positive, learning_on,
                                        self.__settings, self.crowding,
                                        iteration)
            end_time = time.time()
            par_example_dictionary[example.sequence] = str(end_time -
                                                           start_time)
        return par_example_dictionary

    def benchmark_parallel_scyk_with_dict_result(self, grammar: sGCSGrammar,
                                                 test_data, iteration,
                                                 learning_on, iterations):
        par_example_dictionary = dict()
        for example in test_data:
            start_time = time.time()
            for i in range(iterations):
                cyk_result(example.sequence, grammar, example.positive,
                           learning_on, self.__settings, self.crowding,
                           iteration)
            end_time = time.time()
            par_example_dictionary[example.sequence] = str(end_time -
                                                           start_time)
        return par_example_dictionary

    def benchmark_parallel_ladder_scyk_with_dict_result(
            self, grammar: sGCSGrammar, test_data, iteration, learning_on,
            iterations):
        par_example_dictionary = dict()
        for example in test_data:
            start_time = time.time()
            for i in range(iterations):
                cyk_result_ladder(example.sequence, grammar, example.positive,
                                  learning_on, self.__settings, self.crowding,
                                  iteration)
            end_time = time.time()
            par_example_dictionary[example.sequence] = str(end_time -
                                                           start_time)
        return par_example_dictionary

    def init_crowding_and_covering(self, grammar: sGCSGrammar):
        self.crowding = StandardCrowding(self.__settings)
        self.final_covering = CoveringDeterminer.get_final_covering(
            self.__settings, self.crowding)
        self.terminal_covering = CoveringDeterminer.get_terminal_covering(
            self.__settings, self.crowding)
        self.aggressive_covering = CoveringDeterminer.get_aggressive_covering(
            self.__settings, self.crowding)
        self.start_covering = CoveringDeterminer.get_start_covering(
            self.__settings, self.crowding)
        self.iteration = Iteration()
        self.iteration.add_rules(grammar.get_rules())
        self.crowding.iteration = self.iteration
        self.final_covering.iteration = self.iteration
        self.terminal_covering.iteration = self.iteration
        self.aggressive_covering.iteration = self.iteration
        self.start_covering.iteration = self.iteration
Exemple #16
0
 def __init__(self, settings=None):
     self.settings = settings
     self.iteration: Iteration = Iteration()
     self.logger = logging.getLogger(self.__class__.__name__)