# eoPBILDistrib.h

    00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
    00002
    00003 //-----------------------------------------------------------------------------
    00004 // eoPBILDistrib.h
    00005 // (c) Marc Schoenauer, 2001
    00006 /*
    00007     This library is free software; you can redistribute it and/or
    00008     modify it under the terms of the GNU Lesser General Public
    00009     License as published by the Free Software Foundation; either
    00010     version 2 of the License, or (at your option) any later version.
    00011
    00012     This library is distributed in the hope that it will be useful,
    00013     but WITHOUT ANY WARRANTY; without even the implied warranty of
    00014     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    00015     Lesser General Public License for more details.
    00016
    00017     You should have received a copy of the GNU Lesser General Public
    00018     License along with this library; if not, write to the Free Software
    00019     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    00020
    00021     Contact: Marc.Schoenauer@inria.fr
    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);        // just in case
    00059     for (unsigned i=0; i<genomeSize; i++)
    00060       _eo[i] = eo::rng.flip(value()[i]);
    00061     _eo.invalidate();              // DO NOT FORGET!!!
    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; // size of indis
    00098 };
    00099
    00100 #endif