moeoVector.h

00001 /* 
00002 * <moeoVector.h>
00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
00004 * (C) OPAC Team, LIFL, 2002-2007
00005 *
00006 * Arnaud Liefooghe
00007 *
00008 * This software is governed by the CeCILL license under French law and
00009 * abiding by the rules of distribution of free software.  You can  use,
00010 * modify and/ or redistribute the software under the terms of the CeCILL
00011 * license as circulated by CEA, CNRS and INRIA at the following URL
00012 * "http://www.cecill.info".
00013 *
00014 * As a counterpart to the access to the source code and  rights to copy,
00015 * modify and redistribute granted by the license, users are provided only
00016 * with a limited warranty  and the software's author,  the holder of the
00017 * economic rights,  and the successive licensors  have only  limited liability.
00018 *
00019 * In this respect, the user's attention is drawn to the risks associated
00020 * with loading,  using,  modifying and/or developing or reproducing the
00021 * software by the user in light of its specific status of free software,
00022 * that may mean  that it is complicated to manipulate,  and  that  also
00023 * therefore means  that it is reserved for developers  and  experienced
00024 * professionals having in-depth computer knowledge. Users are therefore
00025 * encouraged to load and test the software's suitability as regards their
00026 * requirements in conditions enabling the security of their systems and/or
00027 * data to be ensured and,  more generally, to use and operate it in the
00028 * same conditions as regards security.
00029 * The fact that you are presently reading this means that you have had
00030 * knowledge of the CeCILL license and that you accept its terms.
00031 *
00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
00033 * Contact: paradiseo-help@lists.gforge.inria.fr
00034 *
00035 */
00036 //-----------------------------------------------------------------------------
00037 
00038 #ifndef MOEOVECTOR_H_
00039 #define MOEOVECTOR_H_
00040 
00041 #include <iterator>
00042 #include <vector>
00043 #include <core/MOEO.h>
00044 
00049 template < class MOEOObjectiveVector, class MOEOFitness, class MOEODiversity, class GeneType >
00050 class moeoVector : public MOEO < MOEOObjectiveVector, MOEOFitness, MOEODiversity >, public std::vector < GeneType >
00051 {
00052 public:
00053 
00054     using MOEO < MOEOObjectiveVector, MOEOFitness, MOEODiversity > :: invalidate;
00055     using std::vector < GeneType > :: operator[];
00056     using std::vector < GeneType > :: begin;
00057     using std::vector < GeneType > :: end;
00058     using std::vector < GeneType > :: resize;
00059     using std::vector < GeneType > :: size;
00060 
00062     typedef GeneType AtomType;
00064     typedef std::vector < GeneType > ContainerType;
00065 
00066 
00072     moeoVector(unsigned int _size = 0, GeneType _value = GeneType()) :
00073             MOEO < MOEOObjectiveVector, MOEOFitness, MOEODiversity >(), std::vector<GeneType>(_size, _value)
00074     {}
00075      
00076     
00081     void value(const std::vector < GeneType > & _v)
00082     {
00083         if (_v.size() != size())           // safety check
00084         {
00085             if (size())            // NOT an initial empty std::vector
00086             {
00087                 std::cout << "Warning: Changing size in moeoVector assignation"<<std::endl;
00088                 resize(_v.size());
00089             }
00090             else
00091             {
00092                 throw std::runtime_error("Size not initialized in moeoVector");
00093             }
00094         }
00095         std::copy(_v.begin(), _v.end(), begin());
00096         invalidate();
00097     }
00098 
00099 
00104     bool operator<(const moeoVector< MOEOObjectiveVector, MOEOFitness, MOEODiversity, GeneType> & _moeo) const
00105     {
00106         return MOEO < MOEOObjectiveVector, MOEOFitness, MOEODiversity >::operator<(_moeo);
00107     }
00108 
00109 
00114     virtual void printOn(std::ostream & _os) const
00115     {
00116         MOEO < MOEOObjectiveVector, MOEOFitness, MOEODiversity >::printOn(_os);
00117         _os << ' ';
00118         _os << size() << ' ';
00119         std::copy(begin(), end(), std::ostream_iterator<AtomType>(_os, " "));
00120     }
00121 
00122 
00127     virtual void readFrom(std::istream & _is)
00128     {
00129         MOEO < MOEOObjectiveVector, MOEOFitness, MOEODiversity >::readFrom(_is);
00130         unsigned int sz;
00131         _is >> sz;
00132         resize(sz);
00133         unsigned int i;
00134         for (i = 0; i < sz; ++i)
00135         {
00136             AtomType atom;
00137             _is >> atom;
00138             operator[](i) = atom;
00139         }
00140     }
00141 
00142 };
00143 
00144 
00150 template < class MOEOObjectiveVector, class MOEOFitness, class MOEODiversity, class GeneType >
00151 bool operator<(const moeoVector< MOEOObjectiveVector, MOEOFitness, MOEODiversity, GeneType> & _moeo1, const moeoVector< MOEOObjectiveVector, MOEOFitness, MOEODiversity, GeneType> & _moeo2)
00152 {
00153     return _moeo1.operator<(_moeo2);
00154 }
00155 
00156 
00162 template < class MOEOObjectiveVector, class MOEOFitness, class MOEODiversity, class GeneType >
00163 bool operator>(const moeoVector< MOEOObjectiveVector, MOEOFitness, MOEODiversity, GeneType> & _moeo1, const moeoVector< MOEOObjectiveVector, MOEOFitness, MOEODiversity, GeneType> & _moeo2)
00164 {
00165     return _moeo1.operator>(_moeo2);
00166 }
00167 
00168 #endif /*MOEOVECTOR_H_*/

Generated on Fri Oct 12 15:16:04 2007 for ParadisEO-MOEO:MultiObjectiveEvolvingObjects by  doxygen 1.4.7