from evolalg_steps.selection.selection import Selection from deap import tools import copy class NSGA2Selection(Selection): def __init__(self, copy=False, *args, **kwargs): super(NSGA2Selection, self).__init__(*args, **kwargs, copy=copy) def call(self, population, count=None): super(NSGA2Selection, self).call(population) pop = tools.selNSGA2(population, len(population)) # make count divisible by 4, required by deap.tools.selTournamentDCD() remainder=count % 4 if remainder > 0: count += 4-remainder return copy.deepcopy(tools.selTournamentDCD(pop, count)) # "The individuals sequence length has to be a multiple of 4 only if k is equal to the length of individuals"