class_docstr: An implementation of a Genetic Algorithm which will try to produce the user
  specified target string.
  
  Parameters:
  -----------
  target_string: string
      The string which the GA should try to produce.
  population_size: int
      The number of individuals (possible solutions) in the population.
  mutation_rate: float
      The rate (or probability) of which the alleles (chars in this case) should be
      randomly changed.
docstr: Randomly change the individual's characters with probability
  self.mutation_rate 
code: def _mutate(self, individual):
      """Randomly change the individual's characters with probability
      self.mutation_rate"""
      individual = list(individual)
      for j in range(len(individual)):
          # Make change with probability mutation_rate
          if np.random.random() < self.mutation_rate:
              individual[j] = np.random.choice(self.letters)
      # Return mutated individual as string
      return "".join(individual)
  
file_path: ML-From-Scratch/mlfromscratch/unsupervised_learning/genetic_algorithm.py
imports: from __future__ import print_function, division
  import string
  import numpy
label_desc: Use image node_id 4 for calling the GeneticAlgorithm obj's underlying member method code with example usage: obj._mutate(individual) and returns: str