def make_children(self, parent_one, parent_two, num_children):#{{{ children = [] for child in range(num_children):
            successful = False
            while not successful:
                child_members = []
                member_pool = parent_one.teamMembers + parent_two.teamMembers
                while(len(child_members) < len(parent_one.teamMembers)):
                    if(random.random() < mutation_rate):
                        next_member_index = random.randrange(len(member_pool))
                        child_members.append(member_pool[next_member_index])
                        member_pool.remove(member_pool[next_member_index])
                    else:
                        mutation_member_pool = hirepool.allmembers - child_members
                        child_members.append(
                                mutation_member_pool[random.randrange(len(mutation_member_pool))])
                new_team = team(child_members)
                # if size of memberpool > size of parent_one members 
                # AND matches from new_team to population.teamMembers or new_team.teamMembers

                # if size of memberpool > size of parent_one members AND (
                #if population.teamMembers matches new_team.teamMembers anywhere OR 
                #if children.teamMembers matches new_team.teamMembers anywhere)

                if len(member_pool) > len(parent_one.teamMembers) \
                and (set(population.teamMembers) & set(new_team.teamMembers) \
                or set(children.teamMembers) & set(new_team.teamMembers)):
                    child -= 1
                else:
                    children.append(new_team)
                    successful = True
def geneticAlgorithm():
    # pareto_front = []
    # base_mutation_rate = .05
    global mut_rate
    mutation_rate = .05
    global population
    population = []
    team_size = 12
    max_population_size = 200
    tournament_size = 10
    if team_size < len(hirepool.allmembers):
        for i in max_population_size:
            current_member_pool = hirepool.allmembers
            new_team_members = []
            for j in team_size:
                new_member = current_member_pool[random.randrange(len(current_member_pool))]
                new_team_members.append(new_member)
                current_member_pool.remove(new_member)
            population.append(team(new_team_members))
    else:
        raise Exception("Team size too big!")

    emergency_exit = 1000
    last_change_in_avg = 0
    avg_social = 0
    avg_tech = 0
    generation = 0
    generation_to_log = 1
    while generation + 1 < emergency_exit and last_change_in_avg < 10:
        set_total_fit()
        if len(population) > max_population_size:
            population = sorted(population, key=lambda x: x.total_fitness)GetRange(0, maxPopulationSize)


    def set_total_fit():
        return
    def set_indv_fit():
        return
    def set_dom_ranks():
        return
    def make_children(self, parent_one, parent_two, num_children):#{{{ children = [] for child in range(num_children):
            successful = False
            while not successful:
                child_members = []
                member_pool = parent_one.teamMembers + parent_two.teamMembers
                while(len(child_members) < len(parent_one.teamMembers)):
                    if(random.random() < mutation_rate):
                        next_member_index = random.randrange(len(member_pool))
                        child_members.append(member_pool[next_member_index])
                        member_pool.remove(member_pool[next_member_index])
                    else:
                        mutation_member_pool = hirepool.allmembers - child_members
                        child_members.append(
                                mutation_member_pool[random.randrange(len(mutation_member_pool))])
                new_team = team(child_members)
                # if size of memberpool > size of parent_one members 
                # AND matches from new_team to population.teamMembers or new_team.teamMembers

                # if size of memberpool > size of parent_one members AND (
                #if population.teamMembers matches new_team.teamMembers anywhere OR 
                #if children.teamMembers matches new_team.teamMembers anywhere)

                if len(member_pool) > len(parent_one.teamMembers) \
                and (set(population.teamMembers) & set(new_team.teamMembers) \
                or set(children.teamMembers) & set(new_team.teamMembers)):
                    child -= 1
                else:
                    children.append(new_team)
                    successful = True
        return children#}}}