Advertisement
Guest User

Untitled

a guest
Oct 28th, 2016
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.06 KB | None | 0 0
  1. import random
  2. import math
  3. from string import ascii_lowercase
  4.  
  5. children = 12 #must be an even number
  6. word = "heijeasfsa" #Only small letters
  7. chanse_of_mutation = 12 #The closer to 12, the better chanche of faster results
  8.  
  9.  
  10.  
  11.  
  12. def ArrayOfString(string):
  13. array = []
  14. for i in string:
  15. array.append(i)
  16. return array;
  17.  
  18. def sort(doubleArray):
  19. buckets = []
  20. for i in range(0,len(doubleArray[0][0]) + 1):
  21. buckets.append([])
  22. for x in range(0,len(doubleArray)):
  23. buckets[doubleArray[x][1]].append(doubleArray[x])
  24. newArray = []
  25. for x in reversed(buckets):
  26. for c in x:
  27. if(c != ""):
  28. newArray.append(c)
  29. return newArray
  30.  
  31. def fitness(string,d):
  32. fit = 0;
  33. for i in range (0, len(string)):
  34. if (d[i] == string[i]):
  35. fit += 1;
  36. return fit;
  37.  
  38.  
  39. def kill(doubleArray):
  40. b = math.floor(children/2)
  41. return doubleArray[:b]
  42.  
  43. string = ArrayOfString (word);
  44. alfabet = []
  45. random_words = []
  46.  
  47. def splitt(doubleArray):
  48. newArray = []
  49. for parent in doubleArray:
  50. for child in range(0,2):
  51. word = ""
  52. for letter in parent[0]:
  53. tall = random.randint(0,chanse_of_mutation)
  54. if tall == 0:
  55. word += alfabet[random.randint(0, len(alfabet) - 1)]
  56. else:
  57. word += letter
  58. newArray.append([word,0])
  59. return newArray
  60.  
  61.  
  62.  
  63.  
  64. for c in ascii_lowercase:
  65. alfabet.append(c)
  66.  
  67. for i in range (0,children):
  68. key = ""
  69. for c in range(0, len(string)):
  70. key += alfabet[random.randint(0, len(alfabet) - 1)]
  71. random_words.append([key,0])
  72.  
  73. final_form = False
  74. generation = 1;
  75. most_fit = 0;
  76. while not final_form:
  77. for c in range(0, len(random_words)):
  78. random_words[c][1] = fitness(string, ArrayOfString(random_words[c][0]))
  79. print(" ##########################", "\n", "Generation ",generation,"\n","##########################", "\n")
  80. random_words = sort(random_words)
  81. print(random_words, "\n")
  82.  
  83. if(random_words[0][1] == len(string)):
  84. final_form = True
  85. else:
  86. print(" ##########################", "\n", "Fittest of Generation ",generation,"\n","##########################", "\n")
  87. random_words = kill(random_words)
  88. print(random_words, "\n")
  89. random_words = splitt(random_words)
  90. generation = generation +1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement