(objectives)
return objectives[dominance == 0], dominance
Computes the non-dominated set for a set of data points

    :param objectives: data points
    :return: tuple of the non-dominated set and the degree of dominance,
        dominances gives the number of dominating points for each data point
Computes the non-dominated set for a set of data points
Computes the non - dominated set for a set of data points
def non_dominated_sort(objectives):
    """
    Computes the non-dominated set for a set of data points

    :param objectives: data points
    :return: tuple of the non-dominated set and the degree of dominance,
        dominances gives the number of dominating points for each data point
    """
    extended = np.tile(objectives, (objectives.shape[0], 1, 1))
    dominance = np.sum(np.logical_and(np.all(extended <= np.swapaxes(extended, 0, 1), axis=2),
                                      np.any(extended < np.swapaxes(extended, 0, 1), axis=2)), axis=1)

    return objectives[dominance == 0], dominance
def non_dominated_sort ( objectives ) : extended = np . tile ( objectives , ( objectives . shape [ 0 ] , 1 , 1 ) ) dominance = np . sum ( np . logical_and ( np . all ( extended <= np . swapaxes ( extended , 0 , 1 ) , axis = 2 ) , np . any ( extended < np . swapaxes ( extended , 0 , 1 ) , axis = 2 ) ) , axis = 1 ) return objectives [ dominance == 0 ] , dominance