- Main Page
- Namespaces
- Classes
- Files

- Search for |

# moSteadyFitSolContinue.h

    00001 /*
    00002 * <moSteadyFitSolContinue.h>
    00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
    00004 * (C) OPAC Team, LIFL, 2002-2007
    00005 *
    00006 * Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr)
    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 #ifndef __moSteadyFitSolContinue_h
    00038 #define __moSteadyFitSolContinue_h
    00039
    00040 #include "moSolContinue.h"
    00041
    00043
    00046 template < class EOT > class moSteadyFitSolContinue:public moSolContinue < EOT >
    00047 {
    00048
    00049 public:
    00050
    00052   typedef typename EOT::Fitness Fitness;
    00053
    00055
    00059   moSteadyFitSolContinue (unsigned int __maxNumberOfIterations, unsigned int __maxNumberOfIterationWithoutImprovement)
    00060     : maxNumberOfIterations (__maxNumberOfIterations), maxNumberOfIterationsWithoutImprovement(__maxNumberOfIterationWithoutImprovement),
    00061       maxNumberOfIterationsReached(false), firstFitnessSaved(true), counter(0)
    00062   {}
    00063
    00065
    00071   bool operator   () (const EOT & __sol)
    00072   {
    00073     if(!maxNumberOfIterationsReached)
    00074       {
    00075         maxNumberOfIterationsReached=((++counter)==maxNumberOfIterations);
    00076         if(maxNumberOfIterationsReached)
    00077           {
    00078             std::cout << "moSteadyFitSolContinue: Done the minimum number of iterations [" << counter << "]." << std::endl;
    00079           }
    00080         return true;
    00081       }
    00082
    00083     if(__sol.invalid())
    00084       {
    00085         return true;
    00086       }
    00087
    00088     if(firstFitnessSaved)
    00089       {
    00090         fitness=__sol.fitness();
    00091         counter=0;
    00092         firstFitnessSaved=false;
    00093         return true;
    00094       }
    00095
    00096     counter++;
    00097
    00098     if( __sol.fitness() > fitness )
    00099       {
    00100         fitness=__sol.fitness();
    00101         counter=0;
    00102       }
    00103
    00104     if(counter==maxNumberOfIterationsWithoutImprovement)
    00105       {
    00106         std::cout << "moSteadyFitSolContinue: Done [" << counter  << "] iterations without improvement." << std::endl;
    00107       }
    00108     return counter!=maxNumberOfIterationsWithoutImprovement;
    00109   }
    00110
    00112
    00115   void init ()
    00116   {
    00117     maxNumberOfIterationsReached=false;
    00118     counter=0;
    00119     firstFitnessSaved=true;
    00120   }
    00121
    00122 private:
    00123
    00125   unsigned int maxNumberOfIterations;
    00126
    00128   unsigned int maxNumberOfIterationsWithoutImprovement;
    00129
    00131   bool maxNumberOfIterationsReached;
    00132
    00134   bool firstFitnessSaved;
    00135
    00137   Fitness fitness;
    00138
    00140   unsigned int counter;
    00141 };
    00142
    00143 #endif