CarlosWGama

AG - Questão 3

Jan 16th, 2020
107
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. from ag import AlgoritmoGenetico
  2. import random
  3.  
  4. letras = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N']
  5.  
  6. def funFitness(cromossomo, letras):
  7.     dados = 0
  8.    
  9.     for i in range(len(cromossomo)):
  10.         #Mesma letra nas posições
  11.         if (cromossomo[i] == letras[i]):
  12.             dados += 1
  13.     return dados
  14.  
  15. def criaIndividuo(letras):
  16.     #Cria uma copia igual, para não embaralha a original
  17.     copia = letras[:]
  18.     #Embaralha os valores
  19.     random.shuffle(copia)
  20.     return copia
  21.  
  22. def mutacao(genes):
  23.     pos1 = random.randint(0, len(genes)-1)
  24.     pos2 = random.randint(0, len(genes)-1)
  25.  
  26.     #Inverte a posição
  27.     x = genes[pos1]
  28.     y = genes[pos2]
  29.     genes[pos1] = y
  30.     genes[pos2] = x
  31.     return genes
  32.  
  33. def crossover(pai1, pai2):
  34.     indiceAleatorio = random.randint(0, len(pai1)-1)
  35.  
  36.     #Pega os primeiros do pai 1
  37.     genes1_1 = pai1[:indiceAleatorio]
  38.     #Recupera na ordem os próximos do pai 2
  39.     genes1_2 = []
  40.     for letra in pai2:
  41.         if (letra not in genes1_1):
  42.             genes1_2.append(letra)
  43.  
  44.     #Pega os primeiros do pai 2
  45.     genes2_1 = pai2[:indiceAleatorio]
  46.     #Recupera na ordem os próximos do pai 1
  47.     genes2_2 = []    
  48.     for letra in pai1:
  49.         if (letra not in genes2_1):
  50.             genes2_2.append(letra)
  51.  
  52.     genes1 = genes1_1 + genes1_2
  53.     genes2 = genes2_1 + genes2_2
  54.  
  55.     return genes1, genes2
  56.  
  57. ag = AlgoritmoGenetico(letras, 10, 500, funcaoFitness=funFitness)
  58. ag.funCriaIndividuo = criaIndividuo
  59. ag.funCrossover = crossover
  60. ag.funMutacao = mutacao
  61. ag.executa()
  62. print(ag.melhorResultado())
RAW Paste Data