00001 /* 00002 <moSteadyFitSolContinue.h> 00003 Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 00004 (C) OPAC Team, LIFL, 2002-2008 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 #ifndef _moSteadyFitSolContinue_h 00037 #define _moSteadyFitSolContinue_h 00038 00039 #include <moSolContinue.h> 00040 00042 00045 template < class EOT > 00046 class moSteadyFitSolContinue:public moSolContinue < EOT > 00047 { 00048 public: 00049 00051 typedef typename EOT::Fitness Fitness; 00052 00054 00058 moSteadyFitSolContinue (unsigned int _maxNumberOfIterations, unsigned int _maxNumberOfIterationWithoutImprovement) 00059 : maxNumberOfIterations (_maxNumberOfIterations), maxNumberOfIterationsWithoutImprovement(_maxNumberOfIterationWithoutImprovement), 00060 maxNumberOfIterationsReached(false), firstFitnessSaved(true), counter(0) 00061 {} 00062 00064 00070 bool operator () (const EOT & _solution) 00071 { 00072 if (!maxNumberOfIterationsReached) 00073 { 00074 maxNumberOfIterationsReached=((++counter)==maxNumberOfIterations); 00075 if (maxNumberOfIterationsReached) 00076 { 00077 std::cout << "[moSteadyFitSolContinue.h]: Done the minimum number of iterations [" << counter << "]." << std::endl; 00078 } 00079 return true; 00080 } 00081 00082 if (_solution.invalid()) 00083 { 00084 return true; 00085 } 00086 00087 if (firstFitnessSaved) 00088 { 00089 fitness=_solution.fitness(); 00090 counter=0; 00091 firstFitnessSaved=false; 00092 return true; 00093 } 00094 00095 counter++; 00096 00097 if ( _solution.fitness() > fitness ) 00098 { 00099 fitness=_solution.fitness(); 00100 counter=0; 00101 } 00102 00103 if (counter==maxNumberOfIterationsWithoutImprovement) 00104 { 00105 std::cout << "[moSteadyFitSolContinue.h]: Done [" << counter << "] iterations without improvement." << std::endl; 00106 } 00107 return counter!=maxNumberOfIterationsWithoutImprovement; 00108 } 00109 00111 00114 void init () 00115 { 00116 maxNumberOfIterationsReached=false; 00117 counter=0; 00118 firstFitnessSaved=true; 00119 } 00120 00121 private: 00122 00124 unsigned int maxNumberOfIterations; 00125 00127 unsigned int maxNumberOfIterationsWithoutImprovement; 00128 00130 bool maxNumberOfIterationsReached; 00131 00133 bool firstFitnessSaved; 00134 00136 Fitness fitness; 00137 00139 unsigned int counter; 00140 }; 00141 00142 #endif
1.5.4