testing_set = generate_cases(50) def error_function(program, debug=False): errors = [] for case in training_set: interpreter = PushInterpreter() result = interpreter.run(program, [case[0]], ['_vector_integer'], debug)[0] if result is None: errors.append(1e5) else: errors.append(levenshtein_distance(case[1], result)) return errors atom_generators = list( merge_sets(get_instructions_by_pysh_type("_integer"), get_instructions_by_pysh_type("_boolean"), get_instructions_by_pysh_type("_vector_integer"), get_instructions_by_pysh_type("_exec"), [lambda: 0, lambda: PushVector([], int)])) if __name__ == "__main__": evo = SimplePushGPEvolver(n_jobs=-1, verbose=1, atom_generators=atom_generators, initial_max_genome_size=400, selection_method='lexicase') evo.fit(error_function, 1, ['_vector_integer'])
e = 0 if output[0] is None: e += 1000 elif output[0] != targets[0]: e += 1 if output[1] is None: e += 1000 elif output[1] != targets[1]: e += 1 errors.append(e) return errors atom_generators = list(merge_sets(get_instructions_by_pysh_type('_boolean'), get_instructions_by_pysh_type('_exec'))) mut = UniformMutation(rate=0.1) alt = Alternation(rate=0.1, alignment_deviation=10) ops = [(alt, 0.2), (mut, 0.3), (VariationOperatorPipeline((mut, alt)), 0.5)] if __name__ == "__main__": evo = SimplePushGPEvolver(n_jobs=-1, verbose=1, operators=ops, atom_generators=atom_generators, initial_max_genome_size=300, population_size=500, max_generations=300, simplification_steps=5000) evo.fit(error_function, 3, ['_boolean', '_boolean'])
def error_function(program, debug=False): errors = [] for case in training_set: interpreter = PushInterpreter() interpreter.run(program, [case[0]], [], debug) result = interpreter.state.stdout if result is None: errors.append(1e5) else: errors.append(levenshtein_distance(case[1], result)) return errors atom_generators = list(merge_sets( get_instructions_by_pysh_type("_integer"), get_instructions_by_pysh_type("_boolean"), get_instructions_by_pysh_type("_string"), get_instructions_by_pysh_type("_char"), get_instructions_by_pysh_type("_exec"), get_instructions_by_pysh_type("_print"), [lambda: Character('!')] )) if __name__ == "__main__": evo = SimplePushGPEvolver(n_jobs=-1, verbose=1, atom_generators=atom_generators, initial_max_genome_size=400, max_generations=300) evo.fit(error_function, 1, [])
for case in cases: interpreter = PushInterpreter() output = interpreter.run(program, [case], ['_vector_boolean'], debug)[0] target = prepend_zero(case) if output is None: errors.append(1e5) if len(output) != len(target): errors.append(1e4) else: errors.append(levenshtein_distance(output, target)) return errors atom_generators = list( merge_sets(get_instructions_by_pysh_type('_boolean'), get_instructions_by_pysh_type('_vector'), get_instructions_by_pysh_type('_exec'))) mut = UniformMutation(rate=0.01) alt = Alternation(rate=0.01, alignment_deviation=10) ops = [(alt, 0.2), (mut, 0.3), (VariationOperatorPipeline((mut, alt)), 0.5)] if __name__ == "__main__": evo = SimplePushGPEvolver(n_jobs=-1, verbose=1, operators=ops, atom_generators=atom_generators, initial_max_genome_size=300, population_size=500, max_generations=300, simplification_steps=5000)
def get_instructions_by_pysh_type_invd(self): lst = ri.get_instructions_by_pysh_type('_foo_bar') self.assertEqual(lst, [])
def get_instructions_by_pysh_type_strd(self): lst = ri.get_instructions_by_pysh_type('_boolean') self.assertIsInstance(lst, list) self.assertTrue(len(lst) > 0) self.assertIsInstance(lst[0], Instruction)
interpreter = PushInterpreter() output = interpreter.run(program, [case], ['_vector_integer'])[0] target = [x - 1 for x in case] if output is None: errors.append(1e5) elif len(output) != len(target): errors.append(1e4) else: rmse = np.linalg.norm(np.array(output) - np.array(target)) / np.sqrt(len(output)) errors.append(rmse) return errors atom_generators = list( merge_sets(get_instructions_by_pysh_type('_integer'), get_instructions_by_pysh_type('_vector'), get_instructions_by_pysh_type('_exec'))) mut = UniformMutation(rate=0.1) alt = Alternation(rate=0.1, alignment_deviation=10) ops = [(alt, 0.2), (mut, 0.3), (VariationOperatorPipeline((mut, alt)), 0.5)] if __name__ == "__main__": evo = SimplePushGPEvolver(n_jobs=-1, verbose=1, operators=ops, atom_generators=atom_generators, selection_method='epsilon_lexicase', initial_max_genome_size=300, population_size=500, max_generations=300,
training_set = generate_cases(50) testing_set = generate_cases(50) def error_function(program, debug=False): errors = [] for case in training_set: interpreter = PushInterpreter() result = interpreter.run(program, [case[0]], ['_float'], debug)[0] if result is None: errors.append(1e5) else: errors.append((result - case[1])**2) return errors atom_generators = list( merge_sets(get_instructions_by_pysh_type("_integer"), get_instructions_by_pysh_type("_float"), get_instructions_by_pysh_type("_vector_float"), get_instructions_by_pysh_type("_exec"), [lambda: PushVector([], float)])) if __name__ == "__main__": evo = SimplePushGPEvolver(n_jobs=-1, verbose=1, atom_generators=atom_generators, initial_max_genome_size=400) evo.fit(error_function, 1, ['_float'])