00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 #ifndef _edoBounderUniform_h
00028 #define _edoBounderUniform_h
00029 
00030 #include "edoBounder.h"
00031 
00037 template < typename EOT >
00038 class edoBounderUniform : public edoBounder< EOT >
00039 {
00040 public:
00041     edoBounderUniform( EOT min, EOT max )
00042         : edoBounder< EOT >( min, max )
00043     {
00044     }
00045 
00046     void operator()( EOT& sol )
00047     {
00048         assert( this->min().size() > 0 );
00049         assert( this->max().size() > 0 );
00050 
00051         assert( sol.size() > 0);
00052         assert( sol.size() == this->min().size() );
00053 
00054         eo::log << eo::debug << "BounderUniform: from sol = " << sol;
00055         eo::log.flush();
00056 
00057         unsigned int size = sol.size();
00058         for (unsigned int d = 0; d < size; ++d) {
00059 
00060             if ( sol[d] < this->min()[d] || sol[d] > this->max()[d]) {
00061                 
00062                 sol[d] = rng.uniform( this->min()[d], this->max()[d] );
00063             }
00064         } 
00065         
00066         eo::log << eo::debug << "\tto sol = " << sol << std::endl;
00067     }
00068 };
00069 
00070 #endif // !_edoBounderUniform_h