00001
00002
00003
00004
00005 #include <eo>
00006
00007 #include <eoInt.h>
00008
00009
00010
00011 typedef eoInt<double> Chrom;
00012
00013
00014
00015
00016 double real_value(const Chrom & _chrom)
00017 {
00018 double sum = 0;
00019 for (unsigned i = 0; i < _chrom.size(); i++)
00020 sum += _chrom[i];
00021 return sum/_chrom.size();
00022 }
00023
00024
00025
00026 bool check_permutation(const Chrom & _chrom)
00027 {
00028 for (unsigned i = 0; i < _chrom.size(); ++i)
00029 for (unsigned j = 0; j < _chrom.size(); ++j)
00030 if(i!=j)
00031 if(_chrom[i]==_chrom[j]){
00032 std::cout << " Error: Wrong permutation !" << std::endl;
00033 std::string s;
00034 s.append( " Wrong permutation in t-eoInitPermutation");
00035 throw std::runtime_error( s );
00036 }
00037 return true;
00038 }
00039
00040 int main()
00041 {
00042 const unsigned POP_SIZE = 8, CHROM_SIZE = 16;
00043 unsigned i;
00044
00045
00046 eoInitPermutation <Chrom> random(CHROM_SIZE);
00047
00048
00049 eoPop<Chrom> pop;
00050
00051
00052 eoEvalFuncPtr<Chrom> eval( real_value );
00053
00054 for (i = 0; i < POP_SIZE; ++i)
00055 {
00056 Chrom chrom(CHROM_SIZE);
00057 std::cout << " Initial chromosome n°" << i << " : " << chrom << "..." << std::endl;
00058 random(chrom);
00059 eval(chrom);
00060 std::cout << " ... becomes : " << chrom << " after initialization" << std::endl;
00061 check_permutation(chrom);
00062 pop.push_back(chrom);
00063 }
00064
00065 return 0;
00066 }
00067
00068