32 #ifndef SHARK_ALGORITHMS_DIRECT_SEARCH_CMA_CHROMOSOME_H 33 #define SHARK_ALGORITHMS_DIRECT_SEARCH_CMA_CHROMOSOME_H 68 std::size_t searchSpaceDimension,
69 double successThreshold,
70 double initialStepSize
72 : m_mutationDistribution(true)
73 , m_stepSize( initialStepSize )
74 , m_covarianceMatrixLearningRate( 0 )
75 , m_successThreshold(successThreshold)
77 m_mutationDistribution.
resize( searchSpaceDimension );
79 m_evolutionPath.resize( searchSpaceDimension );
80 m_lastStep.resize( searchSpaceDimension );
81 m_lastZ.resize( searchSpaceDimension );
83 m_targetSuccessProbability = 1.0 / ( 5.0 + 1/2.0 );
85 m_stepSizeDampingFactor = 1.0 + searchSpaceDimension / 2.;
87 m_evolutionPathLearningRate = 2.0 / (2.0 + searchSpaceDimension);
88 m_covarianceMatrixLearningRate = 2.0 / (
sqr(searchSpaceDimension) + 6.);
89 m_covarianceMatrixUnlearningRate = 0.4/( std::pow(searchSpaceDimension, 1.6 )+1. );
105 m_stepSize *= ::exp( 1./m_stepSizeDampingFactor * (m_successProbability - m_targetSuccessProbability) / (1-m_targetSuccessProbability) );
108 if( m_successProbability < m_successThreshold ) {
111 rankOneUpdate(1 - m_covarianceMatrixLearningRate,m_covarianceMatrixLearningRate,m_evolutionPath);
128 m_stepSize *= ::exp( 1./m_stepSizeDampingFactor * (m_successProbability - m_targetSuccessProbability) / (1-m_targetSuccessProbability) );
130 if(offspringSuccess !=
Failure)
return;
132 if( m_successProbability < m_successThreshold ) {
134 double stepNormSqr =
norm_sqr( m_lastZ );
137 if( stepNormSqr > 1 && 1 < m_covarianceMatrixUnlearningRate*(2*stepNormSqr-1) ){
138 rate = 1.0/(2*stepNormSqr-1);
141 rankOneUpdate(1+rate,-rate,m_lastStep);
153 template<
typename Archive>
154 void serialize( Archive & archive,
const unsigned int version ) {
156 archive & BOOST_SERIALIZATION_NVP( m_mutationDistribution );
159 archive & BOOST_SERIALIZATION_NVP( m_evolutionPath );
160 archive & BOOST_SERIALIZATION_NVP( m_lastStep );
162 archive & BOOST_SERIALIZATION_NVP( m_stepSize );
163 archive & BOOST_SERIALIZATION_NVP( m_stepSizeDampingFactor );
164 archive & BOOST_SERIALIZATION_NVP( m_stepSizeLearningRate );
165 archive & BOOST_SERIALIZATION_NVP( m_successProbability );
166 archive & BOOST_SERIALIZATION_NVP( m_targetSuccessProbability );
167 archive & BOOST_SERIALIZATION_NVP( m_evolutionPathLearningRate );
168 archive & BOOST_SERIALIZATION_NVP( m_covarianceMatrixLearningRate );
169 archive & BOOST_SERIALIZATION_NVP( m_covarianceMatrixUnlearningRate );
176 void rankOneUpdate(
double alpha,
double beta, RealVector
const& v){
188 1 - m_covarianceMatrixLearningRate+evolutionpathUpdateWeight,
189 m_covarianceMatrixLearningRate,