moeoAdditiveEpsilonBinaryMetric.h

00001 /* 
00002 * <moeoAdditiveEpsilonBinaryMetric.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 MOEOADDITIVEEPSILONBINARYMETRIC_H_
00039 #define MOEOADDITIVEEPSILONBINARYMETRIC_H_
00040 
00041 #include <metric/moeoNormalizedSolutionVsSolutionBinaryMetric.h>
00042 
00048 template < class ObjectiveVector >
00049 class moeoAdditiveEpsilonBinaryMetric : public moeoNormalizedSolutionVsSolutionBinaryMetric < ObjectiveVector, double >
00050 {
00051 public:
00052 
00060     double operator()(const ObjectiveVector & _o1, const ObjectiveVector & _o2)
00061     {
00062         // computation of the epsilon value for the first objective
00063         double result = epsilon(_o1, _o2, 0);
00064         // computation of the epsilon value for the other objectives
00065         double tmp;
00066         for (unsigned int i=1; i<ObjectiveVector::Traits::nObjectives(); i++)
00067         {
00068             tmp = epsilon(_o1, _o2, i);
00069             result = std::max(result, tmp);
00070         }
00071         // returns the maximum epsilon value
00072         return result;
00073     }
00074 
00075 
00076 private:
00077 
00079     using moeoNormalizedSolutionVsSolutionBinaryMetric < ObjectiveVector, double > :: bounds;
00080 
00081 
00089     double epsilon(const ObjectiveVector & _o1, const ObjectiveVector & _o2, const unsigned int _obj)
00090     {
00091         double result;
00092         // if the objective _obj have to be minimized
00093         if (ObjectiveVector::Traits::minimizing(_obj))
00094         {
00095             // _o1[_obj] - _o2[_obj]
00096             result = ( (_o1[_obj] - bounds[_obj].minimum()) / bounds[_obj].range() ) - ( (_o2[_obj] - bounds[_obj].minimum()) / bounds[_obj].range() );
00097         }
00098         // if the objective _obj have to be maximized
00099         else
00100         {
00101             // _o2[_obj] - _o1[_obj]
00102             result = ( (_o2[_obj] - bounds[_obj].minimum()) / bounds[_obj].range() ) - ( (_o1[_obj] - bounds[_obj].minimum()) / bounds[_obj].range() );
00103         }
00104         return result;
00105     }
00106 
00107 };
00108 
00109 #endif /*MOEOADDITIVEEPSILONBINARYMETRIC_H_*/

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