32 #ifndef SHARK_ALGORITHMS_DIRECT_SEARCH_REAL_CODED_NSGA_II_H 33 #define SHARK_ALGORITHMS_DIRECT_SEARCH_REAL_CODED_NSGA_II_H 59 template<
typename Indicator>
67 std::vector<Individual> m_pop;
76 double m_crossoverProbability;
91 return "RealCodedNSGAII";
96 return m_crossoverProbability;
100 return m_crossoverProbability;
104 return m_mutator.
m_nm;
107 return m_mutator.
m_nm;
111 return m_crossover.
m_nc;
114 return m_crossover.
m_nc;
117 std::size_t
mu()
const{
130 template<
typename Archive>
131 void serialize( Archive & archive,
const unsigned int version ) {
136 archive & m_evaluator;
137 archive & m_crossover;
140 archive & m_crossoverProbability;
153 std::vector<SearchPointType>
const& startingPoints
159 m_pop.reserve( 2 *
mu() );
162 for(std::size_t i = 0; i !=
mu(); ++i){
163 m_pop[i].searchPoint()=
function.proposeStartingPoint();
166 m_evaluator(
function, m_pop.begin(),m_pop.begin()+
mu() );
167 m_selection( m_pop,m_mu );
168 for(std::size_t i = 0; i !=
mu(); ++i){
169 m_best[i].point = m_pop[i].searchPoint();
170 m_best[i].value = m_pop[i].unpenalizedFitness();
173 m_pop.resize(2*
mu());
175 m_crossover.
init(
function);
176 m_mutator.
init(
function);
189 m_pop.begin() +
mu(),
190 m_pop.begin() +
mu(),
194 for( std::size_t i = 1; i <
mu(); i++ ) {
195 if( Rng::coinToss( 0.8 ) ) {
196 m_crossover( m_pop[
mu() + i - 1], m_pop[
mu() + i] );
199 for( std::size_t i = 0; i <
mu(); i++ ) {
200 m_mutator( m_pop[
mu() + i] );
202 m_evaluator(
function, m_pop.begin()+
mu(), m_pop.end() );
203 m_selection( m_pop, m_mu );
207 for( std::size_t i = 0; i !=
mu(); ++i ) {