moeoSharingDiversityAssignment.h

00001 /* 
00002 * <moeoSharingDiversityAssignment.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 MOEOSHARINGDIVERSITYASSIGNMENT_H_
00039 #define MOEOSHARINGDIVERSITYASSIGNMENT_H_
00040 
00041 #include <eoPop.h>
00042 #include <comparator/moeoDiversityThenFitnessComparator.h>
00043 #include <distance/moeoDistance.h>
00044 #include <distance/moeoDistanceMatrix.h>
00045 #include <distance/moeoEuclideanDistance.h>
00046 #include <diversity/moeoDiversityAssignment.h>
00047 
00052 template < class MOEOT >
00053 class moeoSharingDiversityAssignment : public moeoDiversityAssignment < MOEOT >
00054 {
00055 public:
00056 
00058     typedef typename MOEOT::ObjectiveVector ObjectiveVector;
00059 
00060 
00067     moeoSharingDiversityAssignment(moeoDistance<MOEOT,double> & _distance, double _nicheSize = 0.5, double _alpha = 1.0) : distance(_distance), nicheSize(_nicheSize), alpha(_alpha)
00068     {}
00069 
00070 
00076     moeoSharingDiversityAssignment(double _nicheSize = 0.5, double _alpha = 1.0) : distance(defaultDistance), nicheSize(_nicheSize), alpha(_alpha)
00077     {}
00078 
00079 
00084     void operator()(eoPop < MOEOT > & _pop)
00085     {
00086         // 1 - set simuilarities
00087         setSimilarities(_pop);
00088         // 2 - a higher diversity is better, so the values need to be inverted
00089         moeoDiversityThenFitnessComparator < MOEOT > divComparator;
00090         double max = std::max_element(_pop.begin(), _pop.end(), divComparator)->diversity();
00091         for (unsigned int i=0 ; i<_pop.size() ; i++)
00092         {
00093             _pop[i].diversity(max - _pop[i].diversity());
00094         }
00095     }
00096 
00097 
00105     void updateByDeleting(eoPop < MOEOT > & _pop, ObjectiveVector & _objVec)
00106     {
00107         std::cout << "WARNING : updateByDeleting not implemented in moeoSharingDiversityAssignment" << std::endl;
00108     }
00109 
00110 
00111 protected:
00112 
00114     moeoDistance < MOEOT , double > & distance;
00116     moeoEuclideanDistance < MOEOT > defaultDistance;
00118     double nicheSize;
00120     double alpha;
00121 
00122 
00127     virtual void setSimilarities(eoPop < MOEOT > & _pop)
00128     {
00129         // compute distances between every individuals
00130         moeoDistanceMatrix < MOEOT , double > dMatrix (_pop.size(), distance);
00131         dMatrix(_pop);
00132         // compute similarities
00133         double sum;
00134         for (unsigned int i=0; i<_pop.size(); i++)
00135         {
00136             sum = 0.0;
00137             for (unsigned int j=0; j<_pop.size(); j++)
00138             {
00139                 sum += sh(dMatrix[i][j]);
00140             }
00141             _pop[i].diversity(sum);
00142         }
00143     }
00144 
00145 
00150     double sh(double _dist)
00151     {
00152         double result;
00153         if (_dist < nicheSize)
00154         {
00155             result = 1.0 - pow(_dist / nicheSize, alpha);
00156         }
00157         else
00158         {
00159             result = 0.0;
00160         }
00161         return result;
00162     }
00163 
00164 };
00165 
00166 
00167 #endif /*MOEOSHARINGDIVERSITYASSIGNMENT_H_*/

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