-
-
Notifications
You must be signed in to change notification settings - Fork 489
Open
@noahBax
Description
Looking at the code for tournament_selection_nsga2
in parent_selection.py only the first two solutions in each round of selection are ever compared.
pareto_fronts, solutions_fronts_indices = self.non_dominated_sorting(fitness) self.pareto_fronts = pareto_fronts.copy() # Randomly generate pairs of indices to apply for NSGA-II tournament selection for selecting the parents solutions. rand_indices = numpy.random.randint(low=0.0, high=len(solutions_fronts_indices), size=(num_parents, self.K_tournament)) for parent_num in range(num_parents): # Return the indices of the current 2 solutions. current_indices = rand_indices[parent_num] # Return the front index of the 2 solutions. parent_fronts_indices = solutions_fronts_indices[current_indices] if parent_fronts_indices[0] < parent_fronts_indices[1]: # If the first solution is in a lower pareto front than the second, then select it. selected_parent_idx = current_indices[0] elif parent_fronts_indices[0] > parent_fronts_indices[1]: # If the second solution is in a lower pareto front than the first, then select it. selected_parent_idx = current_indices[1] else: # The 2 solutions are in the same pareto front. # The selection is made using the crowding distance. ...
K_tournament solution indexes are selected with randint though. This also happens for crowding distance as well.