Ejemplo n.º 1
0
    def run(self):
        logging.basicConfig(
            format=_red +
            "[%(levelname)s][%(asctime)s][%(name)s] %(message)s" + _normal,
            datefmt="%m/%d/%Y %H:%M:%S",
            level=logging.WARN)

        genome = self.create_genome()
        population = NEAT.Population(genome, self.neat_parameters, True, 1.0,
                                     0)
        previous_best_genomes = None
        current_best_genomes = None
        difference = 0

        self.LOGGER.warn("Population size: {}".format(population.NumGenomes()))

        self.LOGGER.warn(
            "{:>14s} {:>14s} {:>14s} {:>14s} {:>14s} {:>14s}".format(
                "n_species", "stagnation", "mpc", "search_mode",
                "compat_thresh", "improvement"))

        # run for 100 generations
        for generation in range(200):
            tournament = Tournament(population, self.table_size,
                                    self.money_vector_size, self.buy_in,
                                    self.min_denomination,
                                    self.tournament_rounds)

            tournament.play()

            if current_best_genomes:
                previous_best_genomes = current_best_genomes

            current_best_genomes = self.get_best_n_genomes(
                population, self.table_size // 2)

            if previous_best_genomes:
                playoff = PlayOff(current_best_genomes, previous_best_genomes,
                                  self.table_size, self.money_vector_size,
                                  self.buy_in, self.min_denomination,
                                  self.tournament_rounds)
                difference += playoff.play()

            for index in range(population.NumGenomes()):
                genome = population.AccessGenomeByIndex(index)
                genome.SetFitness(genome.GetFitness() + difference)

            self.LOGGER.warn(
                "{:14d} {:14d} {:14.2f} {:>14s} {:14.3f} {:14.2f}".format(
                    len(population.Species), population.GetStagnation(),
                    population.GetCurrentMPC(),
                    population.GetSearchMode().name,
                    population.Parameters.CompatTreshold, difference))

            population.Epoch()

        self.LOGGER.warn("Training complete")
        return self.get_best_n_genomes(population, self.table_size)