t-eoinsertion.cpp

00001 //-----------------------------------------------------------------------------
00002 // t-eoinsertion.cpp
00003 //-----------------------------------------------------------------------------
00004 
00005 #include <eo>  // eoBin, eoPop, eoInsertion
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 

Generated on Thu Oct 19 05:06:43 2006 for EO by  doxygen 1.3.9.1