def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.randomizer = Randomizer(Random()) selector_configuration = [ EvolutionRandomSelectorConfiguration.create(), EvolutionRouletteSelectorConfiguration.create() ] self.configuration = EvolutionConfiguration.create( selector_configuration, inversion_chance=0, mutation_chance=0, crossover_chance=0) self.create_rule_population() self.create_grammar_statistics() self.create_rule_adding() self.sut = EvolutionService(self.randomizer) self.rules = [ Rule(Symbol('S'), Symbol('NP'), Symbol('VP')), Rule(Symbol('VP'), Symbol('VP'), Symbol('PP')), Rule(Symbol('VP'), Symbol('V'), Symbol('NP')), TerminalRule(Symbol('VP'), Symbol('eats')), Rule(Symbol('PP'), Symbol('P'), Symbol('NP')), Rule(Symbol('NP'), Symbol('Det'), Symbol('N')), TerminalRule(Symbol('NP'), Symbol('she')), TerminalRule(Symbol('V'), Symbol('eats')), TerminalRule(Symbol('P'), Symbol('with')), TerminalRule(Symbol('N'), Symbol('fish')), TerminalRule(Symbol('N'), Symbol('fork')), TerminalRule(Symbol('Det'), Symbol('a')) ]
def set_parameters(self): self.configuration.should_run_evolution = True self.configuration.evolution.selectors = [ EvolutionRouletteSelectorConfiguration.create(), EvolutionRouletteSelectorConfiguration.create() ] self.configuration.induction.grammar_correction.should_run = False self.configuration.induction.coverage.operators.terminal.chance = 1 self.configuration.induction.coverage.operators.universal.chance = 0 self.configuration.induction.coverage.operators.starting.chance = 1 self.configuration.induction.coverage.operators.starting.adding_hint = \ AddingRuleStrategyHint.expand_population self.configuration.induction.coverage.operators.full.chance = 1 self.configuration.induction.coverage.operators.full.adding_hint = \ AddingRuleStrategyHint.expand_population self.configuration.max_algorithm_steps = 5000 self.configuration.rule.max_non_terminal_symbols = 19 self.configuration.rule.random_starting_population_size = 30 self.configuration.max_execution_time = 8000 self.configuration.satisfying_fitness = 1 self.configuration.evolution.operators.crossover.chance = 0.2 self.configuration.evolution.operators.mutation.chance = 0.8 self.configuration.evolution.operators.inversion.chance = 0.8 self.configuration.induction.coverage.operators.aggressive.chance = 0 self.configuration.induction.coverage.operators.aggressive.adding_hint = \ AddingRuleStrategyHint.expand_population self.configuration.rule.adding.crowding.factor = 18 self.configuration.rule.adding.crowding.size = 3 self.configuration.rule.adding.elitism.is_used = True self.configuration.rule.adding.elitism.size = 3 self.configuration.rule.adding.max_non_terminal_rules = 40 self.configuration.statistics.positive_weight = 1 self.configuration.statistics.negative_weight = 2 self.configuration.statistics.classical_fitness_weight = 1 self.configuration.statistics.fertility_weight = 0 self.configuration.statistics.base_fitness = 0.5 self.configuration.max_algorithm_runs = 50