Skip to content

NSGA tournament sorting only compares two solutions each round #316

Open
@noahBax

Description

@noahBax

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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions