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)
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))
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))
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
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))
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)
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')
def test_deve_aceitar_quantidade_de_mutacoes(self): mutacao = Mutacao(2) self.assertEqual(2, mutacao.quantidade_mutacoes)