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()