Exemplo n.º 1
0
def main():
    population = create_initial_population()

    population = Evolver.sort_by_fitness(population)

    print('Initial population:')
    print_population(population)

    fitness_evolution = [(0, fitnesses(population))]

    try:
        for n in range(iteration):
            population = Evolver.evolve(population)

            print(n, fitnesses(population), end="    \r")

            if (n + 1) % (iteration // 4) == 0:
                fitness_evolution += [(n + 1, fitnesses(population))]

    except KeyboardInterrupt:
        pass

    finally:
        print('Final population:')
        print_population(population)

        plot_fitness_distributions(fitness_evolution)

        plt.show()
    def generate(self):
        logging.info(
            "***generate(generations, population, all_possible_genes, dataset)***"
        )
        t_start = datetime.datetime.now()
        t = time.time()

        evolver = Evolver(self.params)
        genomes = evolver.create_population(self.population)

        ofile = open(self.path + '/result.csv', "w")
        writer = csv.writer(ofile, delimiter=',')

        table_head = list()
        for p in self.params:
            table_head.append(str(p))

        table_head.append("accuracy")
        row = table_head
        writer.writerow(row)

        # Evolve the generation.
        for i in range(self.generations):
            logging.info("***Now in generation %d of %d***" %
                         (i + 1, self.generations))
            self.print_genomes(genomes)

            # Train and get accuracy for networks/genomes.
            self.train_genomes(genomes, writer)

            # Get the average accuracy for this generation.
            average_accuracy = self.get_average_accuracy(genomes)

            # Print out the average accuracy each generation.
            logging.info("Generation average: %.2f%%" %
                         (average_accuracy * 100))
            logging.info('-' * 80)

            # Evolve, except on the last iteration.
            if i != self.generations - 1:
                genomes = evolver.evolve(genomes)

        # Sort our final population according to performance.
        genomes = sorted(genomes, key=lambda x: x.accuracy, reverse=True)

        # Print out the top 5 networks/genomes.
        self.print_genomes(genomes[:5])

        ofile.close()
        total = time.time() - t
        m, s = divmod(total, 60)
        h, m = divmod(m, 60)
        d, h = divmod(h, 24)
        t_stop = datetime.datetime.now()
        file = open(self.path + '/total_time.txt', 'w')
        file.write('Start : ' + str(t_start) + '\n')
        file.write('Stop : ' + str(t_stop) + '\n')
        file.write('Total :' + "%d days, %d:%02d:%02d" % (d, h, m, s) + '\n')
        file.close()
Exemplo n.º 3
0
def generate(generations, population, all_possible_genes, dataset):
    """Generate a network with the genetic algorithm.

    Args:
        generations (int): Number of times to evolve the population
        population (int): Number of networks in each generation
        all_possible_genes (dict): Parameter choices for networks
        dataset (str): Dataset to use for training/evaluating

    """
    logging.info(
        "***generate(generations, population, all_possible_genes, dataset)***")

    evolver = Evolver(all_possible_genes)

    genomes = evolver.create_population(population)

    # Evolve the generation.
    for i in range(generations):

        logging.info("***Now in generation %d of %d***" % (i + 1, generations))

        print_genomes(genomes)

        # Train and get accuracy for networks/genomes.
        train_genomes(genomes, dataset)

        # Get the average accuracy for this generation.
        average_accuracy = get_average_accuracy(genomes)

        # Print out the average accuracy each generation.
        logging.info("Generation average: %.2f%%" % (average_accuracy * 100))
        logging.info('-' * 80)  #-----------

        # Evolve, except on the last iteration.
        if i != generations - 1:
            # Evolve!
            genomes = evolver.evolve(genomes)

    # Sort our final population according to performance.
    genomes = sorted(genomes, key=lambda x: x.accuracy, reverse=True)

    # Print out the top 5 networks/genomes.
    print_genomes(genomes[:5])
Exemplo n.º 4
0
def generate(generations, population, all_possible_genes, dataset):
    """Generate a network with the genetic algorithm.

    Args:
        generations (int): Number of times to evolve the population
        population (int): Number of networks in each generation
        all_possible_genes (dict): Parameter choices for networks
        dataset (str): Dataset to use for training/evaluating

    """
    logging.info("***generate(generations, population, all_possible_genes, dataset)***")
    
    evolver = Evolver(all_possible_genes)
    
    genomes = evolver.create_population(population)

    # Evolve the generation.
    for i in range( generations ):

        logging.info("***Now in generation %d of %d***" % (i + 1, generations))

        print_genomes(genomes)
        
        # Train and get accuracy for networks/genomes.
        train_genomes(genomes, dataset)

        # Get the average accuracy for this generation.
        average_accuracy = get_average_accuracy(genomes)

        # Print out the average accuracy each generation.
        logging.info("Generation average: %.2f%%" % (average_accuracy * 100))
        logging.info('-'*80) #-----------

        # Evolve, except on the last iteration.
        if i != generations - 1:
            # Evolve!
            genomes = evolver.evolve(genomes)

    # Sort our final population according to performance.
    genomes = sorted(genomes, key=lambda x: x.accuracy, reverse=True)

    # Print out the top 5 networks/genomes.
    print_genomes(genomes[:5])
Exemplo n.º 5
0
from evolver import Evolver
from painter import Painter
from pie import Pie
from rod import Rod
from testlab import TestLab, TestLabParams
from vec import Vec

pygame.init()

testlab_params = TestLabParams(anchor=Vec(50, screen_size / 2),
                               target=Vec(screen_size - 40, screen_size / 2),
                               world_bounds=Vec(screen_size, screen_size))
evolver = Evolver(generations, population_size, testlab_params)
testlab = TestLab(
    testlab_params,
    evolver.evolve(),
    Pie(),
)
painter = Painter(pygame.display.set_mode((screen_size, screen_size)))

clock = pygame.time.Clock()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT: running = False

    testlab.update()
    painter.paint(testlab)

    clock.tick(60)
Exemplo n.º 6
0
def test_evolve_gives_population_with_greater_fitness_sorted_by_fitness():
    Entity = EntityBreadingOffspringWithDoubleFitness
    assert Evolver.evolve([Entity(-1), Entity(-3), Entity(3)]) == [Entity(6), Entity(3), Entity(-1)]
Exemplo n.º 7
0
def test_evolve_empty_population_gives_empty_one():
    assert Evolver.evolve([]) == []