<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _new_population_genalg(population, fitnesses, mutation_chance=0.02, crossover_chance=0.7, selection_function=gaoperators.tournament_selection, crossover_function=gaoperators.one_point_crossover):
 """Perform all genetic algorithm operations on a population, and return a new population. population must have an even number of chromosomes. Args: population: A list of binary lists, ex. [[0,1,1,0], [1,0,1,0]] fitness: A list of fitnesses that correspond with chromosomes in the population, ex. [1.2, 10.8] mutation_chance: the chance that a bit will be flipped during mutation crossover_chance: the chance that two parents will be crossed during crossover selection_function: A function that will select parents for crossover and mutation crossover_function: A function that will cross two parents Returns: list; A new population of chromosomes, that should be more fit. """

    # Selection
    # Create the population of parents that will be crossed and mutated.
    intermediate_population = selection_function(population, fitnesses)

    # Crossover
    new_population = _crossover(intermediate_population, crossover_chance,
                                crossover_function)

    # Mutation
    # Mutates chromosomes in place
    gaoperators.random_flip_mutate(new_population, mutation_chance)

    # Return new population
    return new_population