Ejemplo n.º 1
0
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'])
Ejemplo n.º 2
0
        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'])
Ejemplo n.º 3
0
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, [])
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
 def get_instructions_by_pysh_type_invd(self):
     lst = ri.get_instructions_by_pysh_type('_foo_bar')
     self.assertEqual(lst, [])
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
        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,
Ejemplo n.º 8
0
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'])