def tecnica_selecao_elitista(self, populacao_inicial: list):

        tela = Application()
        tela.start()

        tempo = 1

        populacao = []
        melhor_individuo = {}

        for i in populacao_inicial:
            individuo = self.vetor_para_objeto_populacao_variavel(i)
            self.atribuir_expectativa_vida(individuo)
            populacao.append(individuo)

        while tempo < self.num_max_geracoes and self.melhor_fitness < 63:

            # avaliacao
            # selecao
            # recombinacao

            tela.show_geracao(tempo)

            #seleção
            tela.show_estado("Seleção")
            populacao = self.selecao_elitista(populacao)

            #Gerando estatisticas
            tela.show_estado("Estatistica")

            self.melhor_fitness = 0
            pontuacao_melhor_individuo = 0
            vida_individuo_melhor_finess = 0

            for i in populacao:
                if self.melhor_fitness < i['fitness']:
                    self.melhor_fitness = i['fitness']
                    vida_individuo_melhor_finess = i['vida']
                    melhor_individuo = i
                    pontuacao_melhor_individuo = str(
                        i['somatorio']) + ' [' + ', '.join(
                            str(e) for e in i['calculo_somario']) + ']'

            tela.show_status(len(populacao), pontuacao_melhor_individuo,
                             self.melhor_fitness, vida_individuo_melhor_finess)

            #mutacao
            tela.show_estado("Mutação")
            populacao = self.mutacao(populacao)

            #reprodução
            tela.show_estado("Reprodução")
            novos_individuos = self.recombinacao_populacao_variavel(
                populacao, self.percentual_recombinacao)

            populacao = populacao + novos_individuos

            tempo = tempo + 1

        tela.show_estado("Finalizado")
        print("Fim")
        print("Relatório:")
        print('Individuo:', melhor_individuo)
        print('Geração atual: ', tempo)
        print('Tamanho população inicial: ', self.tamanho_inicial_populacao)
        print('Número máximo gerações: ', self.num_max_geracoes)
        print('Porcentagem de recombinação: ', self.percentual_recombinacao)
        print('Porcentagem de mutação: ', self.percentual_mutacao)
        print('Limite populacional: ', self.limite_populacional)
        print('Porcentagem de redução populacional: ',
              self.porcentagem_reducao_populacional)
    def tecnica_selecao_elitista(self, populacao_inicial:list):


        tela = Application()
        tela.start()

        tempo = 1

        populacao = populacao_inicial
        self.melhor_individuo = populacao[0]

        while tempo < self.num_max_geracoes and self.melhor_individuo.resultado != 0:

            #tela.show_geracao(tempo)

            #seleção
            #tela.show_estado("Seleção")
            populacao = self.selecao_elitista(populacao)


            #Gerando estatisticas
            #tela.show_estado("Estatistica")

            for i in populacao:
                if self.melhor_individuo.resultado > i.resultado:
                    self.melhor_individuo = copy.deepcopy(i)
                    print(self.melhor_individuo.altura(), self.altura_maxima)

                    tela.show_geracao(tempo)

                    tela.show_status(len(populacao),
                                     self.melhor_individuo.resultado,
                                     self.melhor_individuo.formula(),
                                     0
                                     )

            #mutacao
            #tela.show_estado("Mutação")
            populacao = self.mutacao(populacao)

            #reprodução
            #tela.show_estado("Reprodução")

            novos_individuos = self.recombinacao_populacao(populacao, self.percentual_recombinacao)

            populacao = populacao + novos_individuos


            tempo = tempo + 1



        tela.show_estado("Finalizado")
        print("Fim")
        print("Relatório:")
        print('Individuo:', str(self.melhor_individuo.resultado)+ ' - ('+self.melhor_individuo.formula()+')')
        print('Geração atual: ', tempo)
        print('Tamanho população inicial: ', self.tamanho_inicial_populacao)
        print('Número máximo gerações: ', self.num_max_geracoes)
        print('Porcentagem de recombinação: ', self.percentual_recombinacao)
        # print('Porcentagem de mutação: ', self.percentual_mutacao)
        #print('Limite populacional: ', self.limite_populacional)
        print('Porcentagem de redução populacional: ', self.porcentagem_reducao_populacional)