def save_population_operation(self): population = RulePopulation(self.STARTING_SYMBOL) for rule_model in self.population_editor.rules: if rule_model.is_terminal: parent, terminal_word = Rule.from_human_friendly_representation( population.symbol_shift(), population.starting_symbol, population.universal_symbol, rule_model.parent, rule_model.left_child, rule_model.right_child ) terminal_symbol = self.translator.word_to_symbol(terminal_word) population.add_rule(Rule(parent, terminal_symbol), self.randomizer) else: parent, left, right = Rule.from_human_friendly_representation( population.symbol_shift(), population.starting_symbol, population.universal_symbol, rule_model.parent, rule_model.left_child, rule_model.right_child ) population.add_rule(Rule(parent, left, right), self.randomizer) name = os.path.basename(self.population_editor.population_path).split('.')[0] path = os.path.dirname(self.population_editor.population_path) self.simulation_executor.save_population_data(population, path, name)
def _random_symbol_id(self, configuration): return self.randomizer.randint( RulePopulation.symbol_shift(), RulePopulation.symbol_shift() + configuration.rule.max_non_terminal_symbols)