예제 #1
0
def neat_bipedal_walker():
    pop_size = 400
    mutator = NEATMutator(new_edge_probability=0.1, new_node_probability=0.05)
    genome = minimal(input_size=24, output_size=4, depth=5)
    seeder = curry_genome_seeder(mutator=mutator, seed_genomes=[genome])
    metric = generate_neat_metric(c_1=1, c_2=1, c_3=3)
    population = NEATPopulation(population_size=pop_size,
                                delta=4,
                                genome_seeder=seeder,
                                metric=metric)

    ds = DataStore(name='bip_walker_NEAT_data')

    assign_population_fitness = build_env(env_name='BipedalWalker-v3',
                                          num_steps=200,
                                          repetition=1)
    counter_fn = make_counter_fn()

    for i in range(500):
        success = assign_population_fitness(population)
        if success and counter_fn():
            break
        population.speciate()
        data = population.to_dict()
        mutator(population)
        ds.save(data)
        print_progress(data)
    return True
예제 #2
0
def neat_cart_pole():
    pop_size = 1000
    mutator = NEATMutator(new_edge_probability=0.1, new_node_probability=0.05)
    seed_genome = minimal(input_size=4, output_size=1, depth=5)
    seeder = curry_genome_seeder(mutator=mutator, seed_genomes=[seed_genome])
    metric = generate_neat_metric(c_1=1, c_2=1, c_3=3)
    population = NEATPopulation(population_size=pop_size,
                                genome_seeder=seeder,
                                delta=4,
                                metric=metric)

    assign_population_fitness = build_env()
    counter_fn = make_counter_fn()

    for i in range(5):
        success = assign_population_fitness(population)
        if success and counter_fn():
            break
        population.speciate()
        data = population.to_dict()
        print_progress(data)
        mutator(population)

    score = run_env(data['best_genome'], env_name='CartPole-v0', render=True)
    print(f'best_fitness: {score}')
    return True
예제 #3
0
def cart_pole_res_example():
    genome = dense(input_size=4, output_size=1, layer_dims=[2, 2, 2])

    weights_len = len(genome.edges) + len(genome.nodes)
    init_mu = np.random.uniform(-1, 1, weights_len)

    mutator = ADRESMutator(initial_mu=init_mu, std_dev=0.1)

    seeder = curry_genome_seeder(mutator=mutator, seed_genomes=[genome])

    population = RESPopulation(population_size=50, genome_seeder=seeder)

    assign_population_fitness = build_env()
    counter_fn = make_counter_fn()
    for i in range(100):
        success = assign_population_fitness(population)
        if success and counter_fn():
            break
        data = population.to_dict()
        mutator(population)
        print(
            f'generation: {i}, mean score: {data["mean_fitness"]}, best score: {data["best_fitness"]}'
        )

    data = population.to_dict()
    run_env(data['best_genome'], render=True, env_name='CartPole-v0')
예제 #4
0
def bipedal_walker_RES():
    genome = dense(
        input_size=24,
        output_size=4,
        layer_dims=[20]
    )

    weights_len = len(genome.edges) + len(genome.nodes)
    init_mu = np.random.uniform(-1, 1, weights_len)

    mutator = RESMutator(
        initial_mu=init_mu,
        std_dev=0.5,
        alpha=1
    )

    seeder = curry_genome_seeder(
        mutator=mutator,
        seed_genomes=[genome]
    )

    population = RESPopulation(
        population_size=400,
        genome_seeder=seeder
    )

    ds = DataStore(name='bip_walker_RES_data')

    assign_population_fitness = build_env(
        env_name='BipedalWalker-v3',
        num_steps=200,
        repetition=1)
    counter_fn = make_counter_fn()

    for i in range(500):
        success = assign_population_fitness(population)
        if success and counter_fn():
            break
        data = population.to_dict()
        mutator(population)
        print_progress(data)
        ds.save(data)
    return True
예제 #5
0
def cart_pole_simple_example():
    genome = dense(input_size=4, output_size=1, layer_dims=[2, 2, 2])

    mutator = SIMPLEMutator(std_dev=0.1, survival_rate=0.1)

    seeder = curry_genome_seeder(mutator=mutator, seed_genomes=[genome])

    population = SIMPLEPopulation(population_size=50, genome_seeder=seeder)

    assign_population_fitness = build_env()
    counter_fn = make_counter_fn()

    for i in range(100):
        success = assign_population_fitness(population)
        if success and counter_fn():
            break
        data = population.to_dict()
        mutator(population)
        print(
            f'generation: {i}, mean score: {data["mean_fitness"]}, best score: {data["best_fitness"]}'
        )
    run_env(data['best_genome'])