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: Create children from parents by crossover 
code: def _crossover(self, parent1, parent2):
      """Create children from parents by crossover"""
      # Select random crossover point
      cross_i = np.random.randint(0, len(parent1))
      child1 = parent1[:cross_i] + parent2[cross_i:]
      child2 = parent2[:cross_i] + parent1[cross_i:]
      return child1, child2
  
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 5 for calling the GeneticAlgorithm obj's underlying member method code with example usage: obj._crossover(parent1, parent2) and returns: child1,  child2