Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. """
  3. Introducción a los Algoritmos Geneticos
  4. Autor: Guillermo Izquierdo
  5. Este código es para fines educativos exclusivamente.
  6.  
  7. """
  8.  
  9. geneSet = 'abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ '
  10. target = 'Hola Mundo'
  11.  
  12. import datetime
  13. import random
  14. random.seed(2)
  15. startTime = datetime.datetime.now()
  16.  
  17. #Funcion para generar de manera aleatoria una muestra de genes
  18. def generate_parent(length):
  19. genes = [] #Lista donde se almacenan las secuencia aleatoria
  20. while len(genes) < length:
  21. sampleSize = min(length - len(genes), len(geneSet))
  22. genes.extend(random.sample(geneSet,sampleSize)) #Obtención de la muestra aleatoria
  23. return ''.join(genes) #Regresamos una cadena
  24.  
  25. #Funcion de optimización, si el nuestra muestra aleatoria tiene un caracter igual a nuestro target
  26. def get_fitness(guess):
  27. return sum(1 for expected, actual in zip(target,guess) if expected == actual)
  28.  
  29. #Funcion para mutar a nuestra cadena original o padre
  30. def mutate(parent):
  31. index = random.randrange(0,len(parent))
  32. childGenes = list(parent)
  33. newGene, alternate = random.sample(geneSet,2)
  34. childGenes[index] = alternate if newGene == childGenes[index] else newGene
  35. return ''.join(childGenes)
  36.  
  37. #Funcion para imprimir en pantalla los resultados
  38. def display(guess):
  39. timeDiff = datetime.datetime.now() - startTime
  40. fitness = get_fitness(guess)
  41. print('{}\t{}\t{}'.format(guess,fitness,timeDiff))
  42.  
  43.  
  44. #Inicializamos nuestros parametros
  45. bestParent = generate_parent(len(target))
  46. bestFitness = get_fitness(bestParent)
  47. display(bestParent)
  48.  
  49. #Creamos un ciclo para iterar nuestras funciones
  50. #Hasta obtener nuestro target
  51. while True:
  52. child = mutate(bestParent)
  53. childFitness = get_fitness(child)
  54. if bestFitness >= childFitness:
  55. continue
  56. display(child)
  57. if childFitness >= len(bestParent):
  58. break
  59. bestFitness = childFitness
  60. bestParent = child
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement