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 #ifndef _eoSimpleEDA_h
00027 #define _eoSimpleEDA_h
00028
00029
00030
00031 #include <apply.h>
00032 #include <eoEDA.h>
00033 #include <eoContinue.h>
00034 #include <eoDistribUpdater.h>
00035 #include <eoEvalFunc.h>
00036
00046 template<class EOT> class eoSimpleEDA: public eoEDA<EOT>
00047 {
00048 public:
00049
00053 eoSimpleEDA(eoDistribUpdater<EOT>& _update,
00054 eoEvalFunc<EOT>& _eval,
00055 unsigned _popSize,
00056 eoContinue<EOT>& _continuator
00057 ) :
00058 update(_update),
00059 eval(_eval),
00060 popSize(_popSize),
00061 continuator(_continuator)
00062 {}
00063
00069 virtual void operator()(eoDistribution<EOT>& _distrib)
00070 {
00071 eoPop<EOT> pop(popSize, _distrib);
00072 do
00073 {
00074 try
00075 {
00076 apply<EOT>(_distrib, pop);
00077
00078 apply<EOT>(eval, pop);
00079
00080 update(_distrib, pop);
00081
00082 }
00083 catch (std::exception& e)
00084 {
00085 std::string s = e.what();
00086 s.append( " in eoSimpleEDA");
00087 throw std::runtime_error( s );
00088 }
00089 } while ( continuator( pop ) );
00090 }
00091
00092 private:
00093 eoDistribUpdater<EOT> & update;
00094
00095 eoEvalFunc<EOT>& eval;
00096
00097 unsigned popSize;
00098
00099 eoContinue<EOT>& continuator;
00100 };
00101
00102
00103
00104 #endif
00105