This commit is contained in:
nojhan 2011-09-22 11:55:10 +02:00
commit 90e67e46d2
3 changed files with 40 additions and 40 deletions

View file

@ -42,57 +42,57 @@ public:
class Variance class Variance
{ {
public: public:
Variance() : _sumvar(0){} Variance() : _sumvar(0){}
void update(AtomType v) void update(AtomType v)
{ {
_n++; _n++;
AtomType d = v - _mean; AtomType d = v - _mean;
_mean += 1 / _n * d; _mean += 1 / _n * d;
_sumvar += (_n - 1) / _n * d * d; _sumvar += (_n - 1) / _n * d * d;
} }
AtomType get_mean() const {return _mean;} AtomType get_mean() const {return _mean;}
AtomType get_var() const {return _sumvar / (_n - 1);} AtomType get_var() const {return _sumvar / (_n - 1);}
AtomType get_std() const {return sqrt( get_var() );} AtomType get_std() const {return sqrt( get_var() );}
private: private:
AtomType _n; AtomType _n;
AtomType _mean; AtomType _mean;
AtomType _sumvar; AtomType _sumvar;
}; };
public: public:
edoNormalMono< EOT > operator()(eoPop<EOT>& pop) edoNormalMono< EOT > operator()(eoPop<EOT>& pop)
{ {
unsigned int popsize = pop.size(); unsigned int popsize = pop.size();
assert(popsize > 0); assert(popsize > 0);
unsigned int dimsize = pop[0].size(); unsigned int dimsize = pop[0].size();
assert(dimsize > 0); assert(dimsize > 0);
std::vector< Variance > var( dimsize ); std::vector< Variance > var( dimsize );
for (unsigned int i = 0; i < popsize; ++i) for (unsigned int i = 0; i < popsize; ++i)
{ {
for (unsigned int d = 0; d < dimsize; ++d) for (unsigned int d = 0; d < dimsize; ++d)
{ {
var[d].update( pop[i][d] ); var[d].update( pop[i][d] );
} }
} }
EOT mean( dimsize ); EOT mean( dimsize );
EOT variance( dimsize ); EOT variance( dimsize );
for (unsigned int d = 0; d < dimsize; ++d) for (unsigned int d = 0; d < dimsize; ++d)
{ {
mean[d] = var[d].get_mean(); mean[d] = var[d].get_mean();
variance[d] = var[d].get_var(); variance[d] = var[d].get_var();
} }
return edoNormalMono< EOT >( mean, variance ); return edoNormalMono< EOT >( mean, variance );
} }
}; };

View file

@ -38,7 +38,7 @@ class edoUniform : public edoDistrib< EOT >, public edoVectorBounds< EOT >
{ {
public: public:
edoUniform(EOT min, EOT max) edoUniform(EOT min, EOT max)
: edoVectorBounds< EOT >(min, max) : edoVectorBounds< EOT >(min, max)
{} {}
}; };

View file

@ -35,10 +35,10 @@ class edoVectorBounds
{ {
public: public:
edoVectorBounds(EOT min, EOT max) edoVectorBounds(EOT min, EOT max)
: _min(min), _max(max) : _min(min), _max(max)
{ {
assert(_min.size() > 0); assert(_min.size() > 0);
assert(_min.size() == _max.size()); assert(_min.size() == _max.size());
} }
EOT min(){return _min;} EOT min(){return _min;}
@ -46,8 +46,8 @@ public:
unsigned int size() unsigned int size()
{ {
assert(_min.size() == _max.size()); assert(_min.size() == _max.size());
return _min.size(); return _min.size();
} }
private: private: