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 #ifndef _eoPBILDistrib_H
00026 #define _eoPBILDistrib_H
00027
00028 #include <eoDistribution.h>
00029
00043 template <class EOT>
00044 class eoPBILDistrib : public eoDistribution<EOT>,
00045 public eoValueParam<std::vector<double> >
00046 {
00047 public:
00049 eoPBILDistrib(unsigned _genomeSize) :
00050 eoDistribution<EOT>(),
00051 eoValueParam<std::vector<double> >(std::vector<double>(_genomeSize, 0.5), "Distribution"),
00052 genomeSize(_genomeSize)
00053 {}
00054
00056 virtual void operator()(EOT & _eo)
00057 {
00058 _eo.resize(genomeSize);
00059 for (unsigned i=0; i<genomeSize; i++)
00060 _eo[i] = eo::rng.flip(value()[i]);
00061 _eo.invalidate();
00062 }
00063
00065 unsigned Size() {return genomeSize;}
00066
00068 virtual void printOn(std::ostream& os) const
00069 {
00070 os << value().size() << ' ';
00071 for (unsigned i=0; i<value().size(); i++)
00072 os << value()[i] << ' ';
00073 }
00074
00076 virtual void readFrom(std::istream& is)
00077 {
00078 unsigned sz;
00079 is >> sz;
00080
00081 value().resize(sz);
00082 unsigned i;
00083
00084 for (i = 0; i < sz; ++i)
00085 {
00086 double atom;
00087 is >> atom;
00088 value()[i] = atom;
00089 }
00090 }
00091
00092 unsigned int size() {return genomeSize;}
00093
00094 virtual std::string className() const {return "eoPBILDistrib";};
00095
00096 private:
00097 unsigned genomeSize;
00098 };
00099
00100 #endif