Open
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.
Metadata
Metadata
Assignees
Labels
No labels