Skip to content

NSGA tournament sorting only compares two solutions each round #316

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions