28 #ifndef SHARK_ALGORITHMS_DIRECTSEARCH_FASTNONDOMINATEDSORT_H 29 #define SHARK_ALGORITHMS_DIRECTSEARCH_FASTNONDOMINATEDSORT_H 50 template<
typename Extractor>
61 template<
typename PopulationType>
68 std::vector<std::vector<std::size_t> > s(pop.size());
70 std::vector<std::size_t> numberOfDominatingPoints(pop.size(), 0);
72 std::vector<std::size_t> front;
74 for (std::size_t i = 0; i < pop.size(); i++) {
77 for (std::size_t j = 0; j < pop.size(); j++) {
81 int domination = pdc(pop[i], pop[j]);
84 else if (domination < -1)
85 numberOfDominatingPoints[i]++;
88 if (numberOfDominatingPoints[i] == 0){
94 unsigned frontCounter = 2;
95 std::vector<std::size_t> nextFront;
100 while (!front.empty()) {
103 for(std::size_t element = 0; element != front.size(); ++element) {
105 std::vector<std::size_t>
const& dominatedPoints = s[front[element]];
106 for (std::size_t j = 0; j != dominatedPoints.size(); ++j){
107 std::size_t point = dominatedPoints[j];
108 numberOfDominatingPoints[point]--;
110 if (numberOfDominatingPoints[point] == 0){
111 nextFront.push_back(point);
112 pop[point].rank() = frontCounter;
118 front.swap(nextFront);