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