# Order array fitness fitness_ordered_ind = sorted(range(len(fitness)), key=lambda k: fitness[k], reverse=True) # Create parent population by keeping top X% (top_selection) top_num = round(top_selection*N_pop) # parent_indices = [i for i,e in enumerate(fitness_ordered_ind) if e <= top_num] parent_indices = fitness_ordered_ind[:top_num] parent_population = population[parent_indices, :] num_children = len(population) - len(parent_population) children_pop = np.zeros(shape=(num_children,player_char_num + team_char_num + schedule_char_num)) # Create Children for c in range(num_children): parent1 = parent_population[np.random.randint(len(parent_population), size=1)] parent2 = parent_population[np.random.randint(len(parent_population), size=1)] children_pop[c,:] = GA_Funs.get_child(parent1, parent2) # Mutate Children children_pop[c,:] = GA_Funs.mutate_individual(children_pop[c,:], mutation_p, lower_bounds, upper_bounds) # Combine children and parents population = np.vstack((parent_population, children_pop)) # Recheck Fitness for n in range(N_pop): fitness[n] = GA_Funs.get_fitness(population[n,], schedule_data, team_data1, team_data2, team_cols1, team_cols2, player_data1, player_data2, player_cols1, player_cols2, health_data) # Save max fitness fitness_plot_vals[g] = max(fitness) print(max(fitness))
# Create parent population by keeping top X% (top_selection) top_num = round(top_selection * N_pop) # parent_indices = [i for i,e in enumerate(fitness_ordered_ind) if e <= top_num] parent_indices = fitness_ordered_ind[:top_num] parent_population = population[parent_indices, :] num_children = len(population) - len(parent_population) children_pop = np.zeros(shape=(num_children, player_char_num + team_char_num + schedule_char_num)) # Create Children for c in range(num_children): parent1 = parent_population[np.random.randint(len(parent_population), size=1)] parent2 = parent_population[np.random.randint(len(parent_population), size=1)] children_pop[c, :] = GA_Funs.get_child(parent1, parent2) # Mutate Children children_pop[c, :] = GA_Funs.mutate_individual(children_pop[c, :], mutation_p, lower_bounds, upper_bounds) # Combine children and parents population = np.vstack((parent_population, children_pop)) # Recheck Fitness for n in range(N_pop): fitness[n] = GA_Funs.get_fitness(population[n, ], schedule_data, team_data1, team_data2, team_cols1, team_cols2, player_data1, player_data2, player_cols1,