code: def random_replacement(random, population, parents, offspring, args):
      
      num_elites = args.setdefault('num_elites', 0)
      population.sort(reverse=True)
      num_to_replace = min(len(offspring), len(population) - num_elites) 
      valid_indices = range(num_elites, len(population))
      rep_index = random.sample(valid_indices, num_to_replace)
      for i, repind in enumerate(rep_index):
          population[repind] = offspring[i]
      return population
docs: Performs random replacement with optional weak elitism.
      
      This function performs random replacement, which means that
      the offspring replace random members of the population, keeping
      the population size constant. Weak elitism may also be specified 
      through the `num_elites` keyword argument in args. If this is used, 
      the best `num_elites` individuals in the current population are 
      allowed to survive if they are better than the worst `num_elites`
      offspring.
      
      .. Arguments:
         random -- the random number generator object
         population -- the population of individuals
         parents -- the list of parent individuals
         offspring -- the list of offspring individuals
         args -- a dictionary of keyword arguments
  
      Optional keyword arguments in args:
      
      - *num_elites* -- number of elites to consider (default 0)