36 #ifndef SHARK_ALGORITHMS_DIRECT_SEARCH_SMS_EMOA_H 37 #define SHARK_ALGORITHMS_DIRECT_SEARCH_SMS_EMOA_H 50 #include <boost/foreach.hpp> 81 return m_crossoverProbability;
85 return m_crossoverProbability;
89 return m_mutator.
m_nm;
92 return m_mutator.
m_nm;
96 return m_crossover.
m_nc;
99 return m_crossover.
m_nc;
102 unsigned int mu()
const{
115 template<
typename Archive>
116 void serialize( Archive & archive,
const unsigned int version ) {
117 archive & BOOST_SERIALIZATION_NVP( m_pop );
118 archive & BOOST_SERIALIZATION_NVP(m_mu);
119 archive & BOOST_SERIALIZATION_NVP(
m_best);
121 archive & BOOST_SERIALIZATION_NVP( m_evaluator );
122 archive & BOOST_SERIALIZATION_NVP( m_selection );
123 archive & BOOST_SERIALIZATION_NVP( m_crossover );
124 archive & BOOST_SERIALIZATION_NVP( m_mutator );
125 archive & BOOST_SERIALIZATION_NVP( m_crossoverProbability );
137 std::vector<SearchPointType>
const& startingPoints
142 m_pop.resize(
mu() + 1 );
144 for(std::size_t i = 0; i !=
mu(); ++i){
146 m_pop[i].searchPoint() =
function.proposeStartingPoint();
147 m_evaluator(
function, m_pop[i] );
148 m_best[i].point = m_pop[i].searchPoint();
149 m_best[i].value = m_pop[i].unpenalizedFitness();
151 m_selection( m_pop, m_mu );
152 m_crossover.
init(
function);
153 m_mutator.
init(
function);
164 Individual mate1( *selection( m_pop.begin(), m_pop.begin() +
mu() ) );
165 Individual mate2( *selection( m_pop.begin(), m_pop.begin() +
mu() ) );
167 if( Rng::coinToss( m_crossoverProbability ) ) {
168 m_crossover( mate1, mate2 );
171 if( Rng::coinToss() ) {
173 m_pop.back() = mate1;
176 m_pop.back() = mate2;
179 m_evaluator(
function, m_pop.back() );
180 m_selection( m_pop, m_mu );
183 if(m_pop.back().selected()){
184 for(std::size_t i = 0; i !=
mu(); ++i){
185 if(!m_pop[i].selected()){
186 m_best[i].point = m_pop[
mu()].searchPoint();
187 m_best[i].value = m_pop[
mu()].unpenalizedFitness();
188 m_pop[i] = m_pop.back();
196 std::vector<Individual> m_pop;
204 double m_crossoverProbability;