moeoVector.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
00002 
00003 //-----------------------------------------------------------------------------
00004 // moeoVector.h
00005 // (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
00006 /*
00007     This library...
00008 
00009     Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
00010  */
00011 //-----------------------------------------------------------------------------
00012 
00013 #ifndef MOEOVECTOR_H_
00014 #define MOEOVECTOR_H_
00015 
00016 #include <vector>
00017 #include <iterator>
00018 #include <MOEO.h>
00019 
00024 template < class MOEOObjectiveVector, class MOEOFitness, class MOEODiversity, class GeneType >
00025 class moeoVector : public MOEO < MOEOObjectiveVector, MOEOFitness, MOEODiversity >, public std::vector < GeneType >
00026 {
00027 public:
00028 
00029     using MOEO < MOEOObjectiveVector, MOEOFitness, MOEODiversity > :: invalidate;
00030     using std::vector < GeneType > :: operator[];
00031     using std::vector < GeneType > :: begin;
00032     using std::vector < GeneType > :: end;
00033     using std::vector < GeneType > :: resize;
00034     using std::vector < GeneType > :: size;
00035 
00037     typedef GeneType AtomType;
00039     typedef std::vector < GeneType > ContainerType;
00040 
00041 
00047     moeoVector(unsigned _size = 0, GeneType _value = GeneType()) :
00048             MOEO < MOEOObjectiveVector, MOEOFitness, MOEODiversity >(), std::vector<GeneType>(_size, _value)
00049     {}
00050 
00051 
00056     void value(const std::vector < GeneType > & _v)
00057     {
00058         if (_v.size() != size())           // safety check
00059         {
00060             if (size())            // NOT an initial empty std::vector
00061             {
00062                 std::cout << "Warning: Changing size in moeoVector assignation"<<std::endl;
00063                 resize(_v.size());
00064             }
00065         }
00066         std::copy(_v.begin(), _v.end(), begin());
00067         invalidate();
00068     }
00069 
00070 
00075     bool operator<(const moeoVector< MOEOObjectiveVector, MOEOFitness, MOEODiversity, GeneType> & _moeo) const
00076     {
00077         return MOEO < MOEOObjectiveVector, MOEOFitness, MOEODiversity >::operator<(_moeo);
00078     }
00079 
00080 
00085     virtual void printOn(std::ostream & _os) const
00086     {
00087         MOEO < MOEOObjectiveVector, MOEOFitness, MOEODiversity >::printOn(_os);
00088         _os << ' ';
00089         _os << size() << ' ';
00090         std::copy(begin(), end(), std::ostream_iterator<AtomType>(_os, " "));
00091     }
00092 
00093 
00098     virtual void readFrom(std::istream & _is)
00099     {
00100         MOEO < MOEOObjectiveVector, MOEOFitness, MOEODiversity >::readFrom(_is);
00101         unsigned sz;
00102         _is >> sz;
00103         resize(sz);
00104         unsigned i;
00105         for (i = 0; i < sz; ++i)
00106         {
00107             AtomType atom;
00108             _is >> atom;
00109             operator[](i) = atom;
00110         }
00111     }
00112 
00113 };
00114 
00115 
00121 template < class MOEOObjectiveVector, class MOEOFitness, class MOEODiversity, class GeneType >
00122 bool operator<(const moeoVector< MOEOObjectiveVector, MOEOFitness, MOEODiversity, GeneType> & _moeo1, const moeoVector< MOEOObjectiveVector, MOEOFitness, MOEODiversity, GeneType> & _moeo2)
00123 {
00124     return _moeo1.operator<(_moeo2);
00125 }
00126 
00127 
00133 template < class MOEOObjectiveVector, class MOEOFitness, class MOEODiversity, class GeneType >
00134 bool operator>(const moeoVector< MOEOObjectiveVector, MOEOFitness, MOEODiversity, GeneType> & _moeo1, const moeoVector< MOEOObjectiveVector, MOEOFitness, MOEODiversity, GeneType> & _moeo2)
00135 {
00136     return _moeo1.operator>(_moeo2);
00137 }
00138 
00139 
00143 template < class MOEOObjectiveVector, class MOEOFitness, class MOEODiversity >
00144 class moeoRealVector : public moeoVector < MOEOObjectiveVector, MOEOFitness, MOEODiversity, double >
00145 {
00146 public:
00147 
00153     moeoRealVector(unsigned _size = 0, double _value = 0.0) : moeoVector< MOEOObjectiveVector, MOEOFitness, MOEODiversity, double >(_size, _value)
00154     {}
00155 
00156 };
00157 
00158 
00162 template < class MOEOObjectiveVector, class MOEOFitness, class MOEODiversity >
00163 class moeoBitVector : public moeoVector < MOEOObjectiveVector, MOEOFitness, MOEODiversity, bool >
00164 {
00165 public:
00166 
00167     using moeoVector < MOEOObjectiveVector, MOEOFitness, MOEODiversity, bool > :: begin;
00168     using moeoVector < MOEOObjectiveVector, MOEOFitness, MOEODiversity, bool > :: end;
00169     using moeoVector < MOEOObjectiveVector, MOEOFitness, MOEODiversity, bool > :: resize;
00170     using moeoVector < MOEOObjectiveVector, MOEOFitness, MOEODiversity, bool > :: size;
00171 
00172 
00178     moeoBitVector(unsigned _size = 0, bool _value = false) : moeoVector< MOEOObjectiveVector, MOEOFitness, MOEODiversity, bool >(_size, _value)
00179     {}
00180 
00181 
00186     virtual void printOn(std::ostream & _os) const
00187     {
00188         MOEO < MOEOObjectiveVector, MOEOFitness, MOEODiversity >::printOn(_os);
00189         _os << ' ';
00190         _os << size() << ' ';
00191         std::copy(begin(), end(), std::ostream_iterator<bool>(_os));
00192     }
00193 
00194 
00199     virtual void readFrom(std::istream & _is)
00200     {
00201         MOEO < MOEOObjectiveVector, MOEOFitness, MOEODiversity >::readFrom(_is);
00202         unsigned s;
00203         _is >> s;
00204         std::string bits;
00205         _is >> bits;
00206         if (_is)
00207         {
00208             resize(bits.size());
00209             std::transform(bits.begin(), bits.end(), begin(), std::bind2nd(std::equal_to<char>(), '1'));
00210         }
00211     }
00212 
00213 };
00214 
00215 
00216 #endif /*MOEOVECTOR_H_*/

Generated on Tue Apr 17 16:53:21 2007 for ParadisEO-MOEO by  doxygen 1.5.1