def nova(self, comprimento):
        comp = ComparaTexto()
        caracteres = comp.CARACTERES_POSSIVEIS()
        resultado = []
        for _ in range(comprimento):
            aleatorio = randint(0, len(caracteres) - 1)
            resultado.append(caracteres[aleatorio])

        return ''.join(resultado)
Пример #2
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))
Пример #3
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))
Пример #4
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))
Пример #5
0
class Mutacao():
    def __init__(self, mutacoes):
        self.quantidade_mutacoes = mutacoes
        self.random = SystemRandom()
        self.comp = ComparaTexto()
        self.caracteres = self.comp.CARACTERES_POSSIVEIS()

    def mutar(self, texto):
        lst = list(texto)
        for _ in range(self.quantidade_mutacoes):
            novo_caractere = self.__caractere_aleatorio__()
            posicao = self.random.randint(0, len(texto) - 1)
            lst[posicao] = novo_caractere

        return ''.join(lst)

    def __caractere_aleatorio__(self):
        aleatorio = self.random.randint(0, len(self.caracteres) - 1)
        return self.caracteres[aleatorio]
Пример #6
0
 def test_deve_retornar_zero_para_strings_iguais(self):
     comp = ComparaTexto()
     texto = "ABCDEFGH"
     diff = comp.caracteres_diferentes(texto, texto)
     self.assertEquals(0, diff)
Пример #7
0
 def test_deve_retornar_quantidade_de_caracteres_diferentes(self):
     texto = "ABCDEFGH"
     texto_2 = "IJCDEFGH"
     comp = ComparaTexto()
     diff = comp.caracteres_diferentes(texto, texto_2)
     self.assertEquals(2, diff)
Пример #8
0
 def __init__(self, mutacoes):
     self.quantidade_mutacoes = mutacoes
     self.random = SystemRandom()
     self.comp = ComparaTexto()
     self.caracteres = self.comp.CARACTERES_POSSIVEIS()