def __init__(self,
                 pop_size=100,
                 norm_niche_size=0.05,
                 norm_by_dim=False,
                 return_all_opt=True,
                 output=NicheOutput(),
                 **kwargs):
        """

        Parameters
        ----------
        norm_niche_size : float
            The radius in which the clearing shall be performed. The clearing is performed in the normalized design
            space, e.g. 0.05 corresponds to clear all solutions which have less norm euclidean distance than 5%.
        pop_size : {pop_size}
        sampling : {sampling}
        selection : {selection}
        crossover : {crossover}
        mutation : {mutation}
        eliminate_duplicates : {eliminate_duplicates}
        n_offsprings : {n_offsprings}

        """

        surv = kwargs.get("survival")
        if surv is None:
            surv = EpsilonClearingSurvival(norm_niche_size, n_max_each_iter=None, norm_by_dim=norm_by_dim)

        selection = kwargs.get("selection")
        if selection is None:
            selection = TournamentSelection(comp_by_cv_and_clearing_fitness)

        super().__init__(pop_size=pop_size,
                         selection=selection,
                         survival=surv,
                         output=output,
                         advance_after_initial_infill=True,
                         **kwargs)

        # self.termination = NicheTermination()
        self.termination = DefaultSingleObjectiveTermination()

        # whether with rank one after clearing or just the best should be considered as optimal
        self.return_all_opt = return_all_opt


        Parameters
        ----------
        norm_niche_size : float
            The radius in which the clearing shall be performed. The clearing is performed in the normalized design
            space, e.g. 0.05 corresponds to clear all solutions which have less norm euclidean distance than 5%.
        pop_size : {pop_size}
        sampling : {sampling}
        selection : {selection}
        crossover : {crossover}
        mutation : {mutation}
        eliminate_duplicates : {eliminate_duplicates}
        n_offsprings : {n_offsprings}

        
pymoo/algorithms/soo/nonconvex/ga_niching.py