code: def _fitnesses_to_probabilities(fitnesses):
      
      # Do not allow negative fitness values
      min_fitness = min(fitnesses)
      if min_fitness < 0.0:
          # Make smallest fitness value 0
          fitnesses = map(lambda f: f - min_fitness, fitnesses)
  
      fitness_sum = sum(fitnesses)
  
      # Generate probabilities
      # Creates a list of increasing values.
      # The greater the gap between two values, the greater the probability.
      # Ex. [0.1, 0.23, 0.56, 1.0]
      prob_sum = 0.0
      probabilities = []
      for fitness in fitnesses:
          if fitness < 0:
              raise ValueError(
                  "Fitness cannot be negative, fitness = {}.".format(fitness))
          prob_sum += (fitness / fitness_sum)
          probabilities.append(prob_sum)
      probabilities[-1] += 0.0001  # to compensate for rounding errors
  
      return probabilities
docs: Return a list of probabilities proportional to fitnesses.