00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _edoSamplerNormalMono_h
00029 #define _edoSamplerNormalMono_h
00030
00031 #include <cmath>
00032
00033 #include <utils/eoRNG.h>
00034
00035 #include "edoSampler.h"
00036 #include "edoNormalMono.h"
00037 #include "edoBounder.h"
00038
00044 template < typename EOT, typename D = edoNormalMono< EOT > >
00045 class edoSamplerNormalMono : public edoSampler< D >
00046 {
00047 public:
00048 typedef typename EOT::AtomType AtomType;
00049
00050 edoSamplerNormalMono( edoRepairer<EOT> & repairer ) : edoSampler< D >( repairer) {}
00051
00052 EOT sample( edoNormalMono<EOT>& distrib )
00053 {
00054 unsigned int size = distrib.size();
00055 assert(size > 0);
00056
00057
00058
00059
00060 EOT solution;
00061
00062
00063 for (unsigned int i = 0; i < size; ++i) {
00064 AtomType mean = distrib.mean()[i];
00065 AtomType variance = distrib.variance()[i];
00066
00067 AtomType random = rng.normal(mean, sqrt(variance) );
00068
00069 solution.push_back(random);
00070 }
00071
00072 return solution;
00073 }
00074 };
00075
00076 #endif // !_edoSamplerNormalMono_h