00001
00002
00003
00004
00005 #include <eo>
00006
00007
00008
00009 typedef eoBin<float> Chrom;
00010
00011
00012
00013 void binary_value(Chrom& chrom)
00014 {
00015 float sum = 0;
00016 for (unsigned i = 0; i < chrom.size(); i++)
00017 if (chrom[i])
00018 sum += pow(2, chrom.size() - i - 1);
00019 chrom.fitness(sum);
00020 }
00021
00022
00023
00024 main()
00025 {
00026 const unsigned CHROM_SIZE = 4;
00027 unsigned i;
00028
00029 eoBinRandom<Chrom> random;
00030
00031 for (unsigned POP_SIZE = 4; POP_SIZE <=6; POP_SIZE++)
00032 {
00033 eoPop<Chrom> pop;
00034
00035 for (i = 0; i < POP_SIZE; i++)
00036 {
00037 Chrom chrom(CHROM_SIZE);
00038 random(chrom);
00039 binary_value(chrom);
00040 pop.push_back(chrom);
00041 }
00042
00043 for (unsigned POP2_SIZE = 4; POP2_SIZE <=6; POP2_SIZE++)
00044 {
00045 eoPop<Chrom> pop2, pop3, pop4, pop5, popx;
00046
00047 for (i = 0; i < POP2_SIZE; i++)
00048 {
00049 Chrom chrom(CHROM_SIZE);
00050 random(chrom);
00051 binary_value(chrom);
00052 pop2.push_back(chrom);
00053 }
00054
00055 std::cout << "--------------------------------------------------" << std::endl
00056 << "breeders \tpop" << std::endl
00057 << "--------------------------------------------------" << std::endl;
00058 for (i = 0; i < max(pop.size(), pop2.size()); i++)
00059 {
00060 if (pop.size() > i)
00061 std::cout << pop[i] << " " << pop[i].fitness() << " \t";
00062 else
00063 std::cout << "\t\t";
00064 if (pop2.size() > i)
00065 std::cout << pop2[i] << " " << pop2[i].fitness();
00066 std::cout << std::endl;
00067 }
00068
00069 eoInsertion<Chrom> insertion(0.75);
00070 popx = pop;
00071 pop3 = pop2;
00072 insertion(popx, pop3);
00073
00074 eoInsertion<Chrom> insertion2;
00075 popx = pop;
00076 pop4 = pop2;
00077 insertion2(popx, pop4);
00078
00079 eoInsertion<Chrom> insertion3(1.5);
00080 popx = pop;
00081 pop5 = pop2;
00082 insertion3(popx, pop5);
00083
00084 std::cout << std::endl
00085 << "0.75 \t\t1.0 \t\t1.5" << std::endl
00086 << "---- \t\t--- \t\t---" << std::endl;
00087 for (i = 0; i < pop5.size(); i++)
00088 {
00089 if (pop3.size() > i)
00090 std::cout << pop3[i] << " " << pop3[i].fitness() << " \t";
00091 else
00092 std::cout << " \t\t";
00093 if (pop4.size() > i)
00094 std::cout << pop4[i] << " " << pop4[i].fitness() << " \t";
00095 else
00096 std::cout << " \t\t";
00097 if (pop5.size() > i)
00098 std::cout << pop5[i] << " " << pop5[i].fitness();
00099 std::cout << std::endl;
00100 }
00101 }
00102 }
00103
00104 return 0;
00105 }
00106
00107
00108