00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- 00002 00003 // "moSteadyFitSolContinue.h" 00004 00005 // (c) OPAC Team (LIFL), Dolphin project (INRIA), 2003-2007 00006 00007 /* LICENCE TEXT 00008 00009 Contact: paradiseo-help@lists.gforge.inria.fr 00010 */ 00011 00012 #ifndef __moSteadyFitSolContinue_h 00013 #define __moSteadyFitSolContinue_h 00014 00015 #include "moSolContinue.h" 00016 00018 00021 template < class EOT > class moSteadyFitSolContinue:public moSolContinue < EOT > 00022 { 00023 00024 public: 00025 00027 typedef typename EOT::Fitness Fitness; 00028 00030 00034 moSteadyFitSolContinue (unsigned int __maxNumberOfIterations, unsigned int __maxNumberOfIterationWithoutImprovement) 00035 : maxNumberOfIterations (__maxNumberOfIterations), maxNumberOfIterationsWithoutImprovement(__maxNumberOfIterationWithoutImprovement), 00036 maxNumberOfIterationsReached(false), firstFitnessSaved(true), counter(0) 00037 {} 00038 00040 00046 bool operator () (const EOT & __sol) 00047 { 00048 if(!maxNumberOfIterationsReached) 00049 { 00050 maxNumberOfIterationsReached=((++counter)==maxNumberOfIterations); 00051 if(maxNumberOfIterationsReached) 00052 { 00053 std::cout << "moSteadyFitSolContinue: Done the minimum number of iterations [" << counter << "]." << std::endl; 00054 } 00055 return true; 00056 } 00057 00058 if(__sol.invalid()) 00059 { 00060 return true; 00061 } 00062 00063 if(firstFitnessSaved) 00064 { 00065 fitness=__sol.fitness(); 00066 counter=0; 00067 firstFitnessSaved=false; 00068 return true; 00069 } 00070 00071 counter++; 00072 00073 if( __sol.fitness() > fitness ) 00074 { 00075 fitness=__sol.fitness(); 00076 counter=0; 00077 } 00078 00079 if(counter==maxNumberOfIterationsWithoutImprovement) 00080 { 00081 std::cout << "moSteadyFitSolContinue: Done [" << counter << "] iterations without improvement." << std::endl; 00082 } 00083 return counter!=maxNumberOfIterationsWithoutImprovement; 00084 } 00085 00087 00090 void init () 00091 { 00092 maxNumberOfIterationsReached=false; 00093 counter=0; 00094 firstFitnessSaved=true; 00095 } 00096 00097 private: 00098 00100 unsigned int maxNumberOfIterations; 00101 00103 unsigned int maxNumberOfIterationsWithoutImprovement; 00104 00106 bool maxNumberOfIterationsReached; 00107 00109 bool firstFitnessSaved; 00110 00112 Fitness fitness; 00113 00115 unsigned int counter; 00116 }; 00117 00118 #endif
1.5.2