Exemple #1
0
def main():
    rng = NEAT.RNG()
    rng.TimeSeed()

    params = NEAT.Parameters()
    params.PopulationSize = 128
    params.DynamicCompatibility = True
    params.WeightDiffCoeff = 1.0
    params.CompatTreshold = 2.0
    params.YoungAgeTreshold = 15
    params.SpeciesMaxStagnation = 15
    params.OldAgeTreshold = 35
    params.MinSpecies = 5
    params.MaxSpecies = 10
    params.RouletteWheelSelection = False
    params.Elitism = True
    params.RecurrentProb = 0.5
    params.OverallMutationRate = 0.2

    params.MutateWeightsProb = 0.8
    # params.MutateNeuronTimeConstantsProb = 0.1
    # params.MutateNeuronBiasesProb = 0.1

    params.WeightMutationMaxPower = 0.5
    params.WeightReplacementMaxPower = 1.0
    params.MutateWeightsSevereProb = 0.5
    params.WeightMutationRate = 0.25

    params.TimeConstantMutationMaxPower = 0.1
    params.BiasMutationMaxPower = params.WeightMutationMaxPower

    params.MaxWeight = 8

    params.MutateAddNeuronProb = 0.1
    params.MutateAddLinkProb = 0.2
    params.MutateRemLinkProb = 0.0

    params.MutateActivationAProb = 0.0;
    params.ActivationAMutationMaxPower = 0.5;
    params.MinActivationA = 1.1
    params.MaxActivationA = 6.9

    params.MinNeuronTimeConstant = 0.04
    params.MaxNeuronTimeConstant = 0.24

    params.MinNeuronBias = -params.MaxWeight
    params.MaxNeuronBias = params.MaxWeight

    params.MutateNeuronActivationTypeProb = 0.0

    params.ActivationFunction_SignedSigmoid_Prob = 0
    params.ActivationFunction_UnsignedSigmoid_Prob = 0
    params.ActivationFunction_Tanh_Prob = 1
    params.ActivationFunction_TanhCubic_Prob = 0
    params.ActivationFunction_SignedStep_Prob = 0
    params.ActivationFunction_UnsignedStep_Prob = 0
    params.ActivationFunction_SignedGauss_Prob = 0
    params.ActivationFunction_UnsignedGauss_Prob = 0
    params.ActivationFunction_Abs_Prob = 0
    params.ActivationFunction_SignedSine_Prob = 0
    params.ActivationFunction_UnsignedSine_Prob = 0
    params.ActivationFunction_Linear_Prob = 0

    params.CrossoverRate = 0.75  # mutate only 0.25
    params.MultipointCrossoverRate = 0.4
    params.SurvivalRate = 0.2
    
    params.MutateNeuronTraitsProb = 0
    params.MutateLinkTraitsProb = 0

    trials = 5
    generations = 10
 
    g = NEAT.Genome(
            0, 
            24 + 1 + 1, 
            0, 
            4, 
            False,
            NEAT.ActivationFunction.TANH, 
            NEAT.ActivationFunction.TANH, 
            0, 
            params, 
            0, 
            1)

    pop = NEAT.Population(g, params, True, 1.0, rnd.randint(0, 1000))
    hof = []
    maxf_ever = 0

    env = gym.make('BipedalWalker-v3')

    try:
        for generation in range(generations):
            fitnesses = []
            #args = [x for x in NEAT.GetGenomeList(pop)]
            #dv.block=True
            #fitnesses = dv.map_sync(evaluate_genome, args)
            for _, genome in tqdm(enumerate(NEAT.GetGenomeList(pop))):
                fitness = evaluate_genome(env, genome, trials)
                fitnesses.append(fitness)
            for genome, fitness in zip(NEAT.GetGenomeList(pop), fitnesses):
                genome.SetFitness(fitness)
            maxf = max([x.GetFitness() for x in NEAT.GetGenomeList(pop)])
            print('Generation: {}, max fitness: {}'.format(generation, maxf))
            if maxf > maxf_ever:
                maxf_ever = maxf
                hof.append(pickle.dumps(pop.GetBestGenome()))
            pop.Epoch()
    except KeyboardInterrupt:
        pass

    print('Replaying forever..')

    if hof:
        while True:
            net = NEAT.NeuralNetwork()
            g = pickle.loads(hof[-1])
            g.BuildPhenotype(net)
            do_trial(env, net, True)
Exemple #2
0
import gym
import time

import MultiNEAT as NEAT
import MultiNEAT.viz as viz
import random as rnd
import pickle
import numpy as np
import cv2

rng = NEAT.RNG()
rng.TimeSeed()

params = NEAT.Parameters()
params.PopulationSize = 150
params.DynamicCompatibility = True
params.WeightDiffCoeff = 1.0
params.CompatTreshold = 2.0
params.YoungAgeTreshold = 15
params.SpeciesMaxStagnation = 15
params.OldAgeTreshold = 35
params.MinSpecies = 2
params.MaxSpecies = 4
params.RouletteWheelSelection = False
params.Elitism = True
params.RecurrentProb = 0.15
params.OverallMutationRate = 0.2

params.MutateWeightsProb = 0.8
params.MutateNeuronTimeConstantsProb = 0.1
Exemple #3
0
def main():
    pygame.init()
    screen = pygame.display.set_mode((600, 600))
    pygame.display.set_caption("NEAT volleyball")


    ### Physics stuff
    space = pm.Space()
    space.gravity = Vec2d(0.0, -500.0)

    # walls - the left-top-right walls
    body = pm.Body()
    walls= [pm.Segment(body, (50, 50), (50, 1550), 10)
                ,pm.Segment(body, (50, 1550), (560, 1550), 10)
                ,pm.Segment(body, (560, 1550), (560, 50), 10)
                ]

    floor = pm.Segment(body, (50, 50), (560, 50), 10)
    floor.friction = 1.0
    floor.elasticity = 0.0
    floor.collision_type = collision_type_floor

    for s in walls:
        s.friction = 0
        s.elasticity = 0.99
        s.collision_type = collision_type_wall
    space.add(walls)
    space.add(floor)



    params = NEAT.Parameters()
    params.PopulationSize = 250
    params.DynamicCompatibility = True
    params.AllowClones = True
    params.CompatTreshold = 5.0
    params.CompatTresholdModifier = 0.3
    params.YoungAgeTreshold = 15
    params.SpeciesMaxStagnation = 100
    params.OldAgeTreshold = 35
    params.MinSpecies = 3
    params.MaxSpecies = 10
    params.RouletteWheelSelection = True
    params.RecurrentProb = 0.25
    params.OverallMutationRate = 0.33
    params.MutateWeightsProb = 0.90
    params.WeightMutationMaxPower = 1.0
    params.WeightReplacementMaxPower = 5.0
    params.MutateWeightsSevereProb = 0.5
    params.WeightMutationRate = 0.75
    params.MaxWeight = 20
    params.MutateAddNeuronProb = 0.01
    params.MutateAddLinkProb = 0.05
    params.MutateRemLinkProb = 0.00

    rng = NEAT.RNG()
    rng.TimeSeed()
    #rng.Seed(0)
    g = NEAT.Genome(0, 6, 0, 2, False, NEAT.ActivationFunction.TANH, NEAT.ActivationFunction.UNSIGNED_SIGMOID, 0, params)
    pop = NEAT.Population(g, params, True, 1.0)

    best_genome_ever = None
    fast_mode = False
    for generation in range(1000):
        print "Generation:", generation

        now = time.time()
        genome_list = []
        for s in pop.Species:
            for i in s.Individuals:
                genome_list.append(i)

        print 'All individuals:', len(genome_list)

        for i, g in enumerate(genome_list):
            total_fitness = 0
            for trial in range(20):
                f, fast_mode = evaluate(g, space, screen, fast_mode, rnd.randint(80, 400), rnd.randint(-200, 200), rnd.randint(80, 400))
                total_fitness += f
            g.SetFitness(total_fitness / 20)
        print

        best = max([x.GetLeader().GetFitness() for x in pop.Species])
        print 'Best fitness:', best, 'Species:', len(pop.Species)


        # Draw the best genome's phenotype
        net = NEAT.NeuralNetwork()
        best_genome_ever = pop.Species[0].GetLeader()
        best_genome_ever.BuildPhenotype(net)
        img = np.zeros((250, 250, 3), dtype=np.uint8)
        img += 10
        NEAT.DrawPhenotype(img, (0, 0, 250, 250), net )
        cv2.imshow("current best", img)
        cv2.waitKey(1)

        if best >= 10000:
            break # evolution is complete if an individual keeps the ball up for that many timesteps
        #if pop.GetStagnation() > 500:
        #    break

        print "Evaluation took", time.time() - now, "seconds."
        print "Reproducing.."
        now = time.time()
        pop.Epoch()
        print "Reproduction took", time.time() - now, "seconds."

    # Show the best genome's performance forever
    pygame.display.set_caption("Best genome ever")
    while True:
        evaluate(best_genome_ever, space, screen, False, rnd.randint(80, 400), rnd.randint(-200, 200), rnd.randint(80, 400))