Ejemplo n.º 1
0
 def test_deve_mutar_cada_membro_da_nova_geracao(self):
     mutacao = Mutacao(1)
     mock = Mock()
     mutacao.mutar = mock
     reproducao = Reproducao(self.pai, mutacao)
     geracao = reproducao.criar_geracao(self.numero_de_filhos)
     self.assertEqual(self.numero_de_filhos, mock.call_count)
Ejemplo n.º 2
0
 def test_deve_alterar_exatamente_a_quantidade_de_caracteres_solicitada_1(
         self):
     original = "ABCDEFGHIJKLMOPQ"
     mutacao = Mutacao(1)
     mutante = mutacao.mutar(original)
     self.assertEqual(
         1,
         ComparaTexto().caracteres_diferentes(original, mutante))
Ejemplo n.º 3
0
 def test_deve_alterar_exatamente_a_quantidade_de_caracteres_solicitada_2(
         self):
     #Teste ruim!
     #Tanto este teste quanto o teste abaixo não são independentes
     #A maneira correta de efetuar estes testes seria injetar um encapsulamento
     #da class SystemRandom e validar a quantidade de chamadas em um mock
     #Estes testes falham eventualmente por colisões na geração de números aleatórios
     original = "ABCDEFGHIJKLMOPQ"
     mutacao = Mutacao(2)
     mutante = mutacao.mutar(original)
     self.assertEqual(
         2,
         ComparaTexto().caracteres_diferentes(original, mutante))
Ejemplo n.º 4
0
def main():                                                             # Método principal(main)
    caracter = '!, .:;?áÁãÃâÂõÕôÔóÓéêÉÊíQWERTYUIOPASDFGHJKLÇZXCVBNMqwertyuiopasdfghjklçzxcvbnm1234567890'  # Caracteres aceitáveis 
    frase = list("Im an iron man")                              # Frase deverá ser encontrada
    Tamanho_Populacao     = 100                                 # Tamanho da População
    NUM_CROM    = len(frase)                                    # Número  de Cromossomos
    Taxa_Selec  =  0.6                                          # Taxa de seleção
    Taxa_Mutac  =  0.6                                          # Taxa de mutação
    populacao   = [ ]                                           # variáveis Temporárias
    listaSelec  = [ ]
    listaFilh   = [ ]
    listaN_POP  = [ ]
   
 
    #Cria a População Inicial
    print("População Inicial")
    print("_"*40)
    P = Populacao (Tamanho_Populacao, frase)                            # variável P recebe uma instancia da classe população
    populacao = P.Gera_PopInic(caracter, Tamanho_Populacao, NUM_CROM)   # método para geração da população inicial

    num_geracao = 0
    while(is_frase(populacao, NUM_CROM)):                               #
            # Seleção 
            S = Selecao(Taxa_Selec, populacao, NUM_CROM, Tamanho_Populacao)     # Variável S recebe uma instancia da classe Seleção 
            listaSelec =  S.selecao_Torneio(3)                                  # O Método Seleção por Torneio retorna uma lista de indivíduos selecionados
            #listaSelec =  S.selecao_roleta()

            # Cruzamento
            C = Cruzamento(Tamanho_Populacao,listaSelec, NUM_CROM)              # Variável C recebe a classe Cruzamento  
            listaFilh =  C.geraCruzamento(frase)                                # O Método Cruzamento com varios pontos de corte retorna uma lista de filhos
            
            # Mutação
            M = Mutacao(Tamanho_Populacao, NUM_CROM, listaFilh, populacao, Taxa_Mutac,caracter) # Variável M recebe a uma instancia da classe Mutação  
            listaN_POP = M.gera_Mutacao(frase)                                  # O Método de Mutação por caracter aleatório retorna uma lista de indivíduos que sofreram ou não mutação
            
            populacao = listaN_POP                      # Variável população recebe nova população
            Tamanho_Populacao = len(populacao)          # Variável tamanho da população recebe o novo tamanho da população
            num_geracao += 1                            # Variável 'num_geracao' e incrementada

            print("ciclo {}".format(num_geracao))       # Imprimi o número de ciclos
Ejemplo n.º 5
0
 def inicia(self):
     gerador = GeradorStrings()
     inicio = gerador.nova(len(self.texto_esperado))
     comp = ComparaTexto()
     atual = inicio
     mutacao = Mutacao(2)
     i = 1
     while atual != self.texto_esperado:
         reproducao = Reproducao(atual, mutacao)
         nova_geracao = reproducao.criar_geracao(self.filhos_por_geracao)
         analise = []
         for filho in nova_geracao:
             heappush(analise, (comp.caracteres_diferentes(filho, self.texto_esperado), filho))
         atual = heappop(analise)[1]
         print('Melhor filho: ' + atual)
         i += 1
         print('Geração: ' + str(i))
Ejemplo n.º 6
0
class ReproducaoTests(unittest.TestCase):

    pai = "ABCDEFGHIJ"
    numero_de_filhos = 10
    mutacao_padrao = Mutacao(1)

    def test_deve_aceitar_pai_no_construtor(self):
        reproducao = Reproducao(self.pai, self.mutacao_padrao)
        self.assertEqual(self.pai, reproducao.pai)

    def test_deve_criar_nova_geracao_com_numero_de_filhos_esperados(self):
        reproducao = Reproducao(self.pai, self.mutacao_padrao)
        geracao = reproducao.criar_geracao(self.numero_de_filhos)
        self.assertEqual(10, len(geracao))

    def test_deve_mutar_cada_membro_da_nova_geracao(self):
        mutacao = Mutacao(1)
        mock = Mock()
        mutacao.mutar = mock
        reproducao = Reproducao(self.pai, mutacao)
        geracao = reproducao.criar_geracao(self.numero_de_filhos)
        self.assertEqual(self.numero_de_filhos, mock.call_count)
Ejemplo n.º 7
0
    populacao = list(filter(lambda x: x != -1, populacao))
    valores_indv = list(filter(lambda x: x != -1, valores_indv))

    elite = Elitismo.escolher(populacao, valores_indv, elitismo)

    if (metd_sel == 'roleta'):
        aptos = Selecao.roleta(populacao, valores_indv)
    elif (metd_sel == 'torneio'):
        aptos = Selecao.torneio(populacao, valores_indv, 3)

    if aptos == None:
        break

    aptos.extend(elite)

    populacao = Crossover.crossover(aptos, corte_pos, tam_pop)
    Mutacao.mutar(populacao, tax_mut)
    valores_indv = funcAptidao(populacao)

    print('\nGeração:', geracao)
    f.write('\nGeração:')
    f.write(str(geracao))
    f.write('\n')

    for i in range(len(populacao)):
        print(populacao[i], valores_indv[i])
        f.write(str(populacao[i]))
        f.write(str(valores_indv[i]))
        f.write('\n')
Ejemplo n.º 8
0
 def test_deve_aceitar_quantidade_de_mutacoes(self):
     mutacao = Mutacao(2)
     self.assertEqual(2, mutacao.quantidade_mutacoes)