def execute(self):
        """Perform the optimization"""
        self.set_events()

        alleles = self._make_alleles()

        genome = G1DList.G1DList(len(alleles))
        genome.setParams(allele=alleles)
        genome.evaluator.set(self._run_model)

        genome.mutator.set(Mutators.G1DListMutatorAllele)
        genome.initializator.set(Initializators.G1DListInitializatorAllele)
        #TODO: fix tournament size settings
        #genome.setParams(tournamentPool=self.tournament_size)

        # Genetic Algorithm Instance
        #print self.seed

        #configuring the options
        ga = GSimpleGA.GSimpleGA(genome, interactiveMode=False,
                                 seed=self.seed)
        pop = ga.getPopulation()
        pop = pop.scaleMethod.set(Scaling.SigmaTruncScaling)
        ga.setMinimax(Consts.minimaxType[self.opt_type])
        ga.setGenerations(self.generations)
        ga.setMutationRate(self.mutation_rate)
        if self.count > 1:
            ga.setCrossoverRate(self.crossover_rate)
        else:
            ga.setCrossoverRate(0)
        ga.setPopulationSize(self.population_size)
        ga.setElitism(self.elitism)

        #setting the selector for the algorithm
        ga.selector.set(self._selection_mapping[self.selection_method])

        #GO
        ga.evolve(freq_stats=0)

        self.best_individual = ga.bestIndividual()

        #run it once to get the model into the optimal state
        self._run_model(self.best_individual)
dataset/ETHPy150Open OpenMDAO/OpenMDAO-Framework/openmdao.lib/src/openmdao/lib/drivers/genetic.py/Genetic.execute/original