Пример #1
0
class Simulation(object):
    """The overall simulation."""
    def __init__(self, size=100):
        logging.info("Creating maze environment")
        self._maze = Maze().withDecisionReward(1)\
            .withGoalReward(20)\
            .withRevisitPenalty(2)\
            .withOutOfBoundsPenalty(2)

        logging.info("Creating gene builder")
        self._gb = GeneBuilder().withGeneset(self._maze.genes).withLength(8)\
            .withMutation(0.03)\
            .withCrossover(crossover_random)

        self._population_size = size
        self._population = None
        self._new_population = Generation(self._population_size, self._gb).from_random()
        self._new_population.log()

        self.generation = 0

    def _make_new_generation(self):
        self._new_population = Generation(self._population_size, self._gb).from_previous_generation(self._population)
        self.generation += 1

    @property
    def best_fitness(self):
        return self._population.best_fitness

    @property
    def best_genes(self):
        return self._population.best

    @property
    def mean(self):
        return self._population.mean_fitness

    def step_generation(self):
        self._population = self._new_population
        logging.info("Testing..")
        self._population.test(self._maze)
        logging.info("Breeding...")
        self._make_new_generation()