moFirstImprSelect.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
00002 
00003 // "moFirstImprSelect.h"
00004 
00005 // (c) OPAC Team, LIFL, 2003-2006
00006 
00007 /* LICENCE TEXT
00008    
00009    Contact: paradiseo-help@lists.gforge.inria.fr
00010 */
00011 
00012 #ifndef __moFirstImprSelect_h
00013 #define __moFirstImprSelect_h
00014 
00015 #include "moMoveSelect.h"
00016 
00018 
00023 template < class M > class moFirstImprSelect:public moMoveSelect < M >
00024 {
00025 
00026 public:
00027 
00029   typedef typename M::EOType::Fitness Fitness;
00030 
00032 
00035   virtual void init (const Fitness & __fit)
00036   {
00037 
00038     valid = false;
00039     init_fit = __fit;
00040   }
00041 
00042 
00044 
00052   bool update (const M & __move, const typename M::EOType::Fitness & __fit)
00053   {
00054 
00055     if (__fit > init_fit)
00056       {
00057 
00058         best_fit = __fit;
00059         best_move = __move;
00060         valid = true;
00061 
00062         return false;
00063       }
00064     else
00065       {
00066         return true;
00067       }
00068   }
00069 
00071 
00076   void operator   () (M & __move, Fitness & __fit) throw (EmptySelection)
00077   {
00078 
00079     if (valid)
00080       {
00081         __move = best_move;
00082         __fit = best_fit;
00083       }
00084     else
00085       throw EmptySelection ();
00086   }
00087 
00088 private:
00089 
00091   bool valid;
00092 
00094   M best_move;
00095 
00097   Fitness init_fit;
00098 
00100   Fitness best_fit;
00101 
00102 };
00103 
00104 #endif

Generated on Thu Dec 21 10:49:58 2006 for PARADISEO-MO by  doxygen 1.5.1