eoNDSorting< EOT > Class Template Reference

Non dominated sorting, it *is a* std::vector of doubles, the integer part is the rank (to which front it belongs), the fractional part the niching penalty or distance penalty or whatever penalty you want to squeeze into the bits. More...

#include <eoNDSorting.h>

Inheritance diagram for eoNDSorting< EOT >:

eoPerf2WorthCached< EOT, WorthT > eoPerf2Worth< EOT, WorthT > eoUF< A1, R > eoValueParam< std::vector< WorthT > > eoFunctorBase eoParam eoNDSorting_I< EOT > eoNDSorting_II< EOT > List of all members.

Public Member Functions

 eoNDSorting (bool nasty_flag_=false)
 eoNDSorting ()
virtual std::vector< double > niche_penalty (const std::vector< unsigned > &current_front, const eoPop< EOT > &_pop)=0
 Pure virtual function that calculates the 'distance' for each element in the current front Implement to create your own nondominated sorting algorithm.
void calculate_worths (const eoPop< EOT > &_pop)
 The actual virtual function the derived classes should implement.

Public Attributes

bool nasty_declone_flag_that_only_is_implemented_for_two_objectives

Private Member Functions

void one_objective (const eoPop< EOT > &_pop)
void two_objectives (const eoPop< EOT > &_pop)
 Optimization for two objectives.
void m_objectives (const eoPop< EOT > &_pop)
void rank_to_worth ()

Classes

class  DummyEO
 used in fast nondominated sorting DummyEO is just a storage place for fitnesses and to store the original index More...
class  Sorter

Detailed Description

template<class EOT>
class eoNDSorting< EOT >

Non dominated sorting, it *is a* std::vector of doubles, the integer part is the rank (to which front it belongs), the fractional part the niching penalty or distance penalty or whatever penalty you want to squeeze into the bits.

Definition at line 42 of file eoNDSorting.h.


Member Function Documentation

template<class EOT>
virtual std::vector<double> eoNDSorting< EOT >::niche_penalty ( const std::vector< unsigned > &  current_front,
const eoPop< EOT > &  _pop 
) [pure virtual]

Pure virtual function that calculates the 'distance' for each element in the current front Implement to create your own nondominated sorting algorithm.

The size of the returned std::vector should be equal to the size of the current_front.

Implemented in eoNDSorting_I< EOT >, and eoNDSorting_II< EOT >.

Referenced by eoNDSorting< Dummy >::m_objectives(), and eoNDSorting< Dummy >::two_objectives().

template<class EOT>
void eoNDSorting< EOT >::two_objectives ( const eoPop< EOT > &  _pop  )  [inline, private]

Optimization for two objectives.

Makes the algorithm run in complexity O(n log n) where n is the population size

This is the same complexity as for a single objective or truncation selection or sorting.

It will perform a sort on the two objectives seperately, and from the information on the ranks of the individuals on these two objectives, the non-dominated sorting rank is determined. There are then three nlogn operations in place: one sort per objective, plus a binary search procedure to combine the information about the ranks.

After that it is a simple exercise to calculate the distance penalty

Definition at line 140 of file eoNDSorting.h.

Referenced by eoNDSorting< Dummy >::calculate_worths().


The documentation for this class was generated from the following file:
Generated on Thu Apr 19 11:02:32 2007 for EO by  doxygen 1.4.7