00001 // Program to test several EO-ES features 00002 00003 #ifdef _MSC_VER 00004 #pragma warning(disable:4786) 00005 #endif 00006 00007 #include <string> 00008 #include <iostream> 00009 #include <iterator> 00010 00011 using namespace std; 00012 00013 // general 00014 #include <utils/eoParser.h> // though contained in all others! 00015 // evolution specific 00016 #include <eoEvalFuncPtr.h> 00017 //#include <eoSequentialOpHolder.h> 00018 //#include <eoFullEA.h> 00019 // representation specific 00020 00021 #include <es/eoESFullChrom.h> // though contained in following 00022 //#include <eoESReco.h> 00023 #include <es/eoESFullMut.h> 00024 //#include <eoESRandomize.h> 00025 // this fitness 00026 #include "real_value.h" // the sphere fitness 00027 00028 // Now the main 00030 typedef eoESFullChrom<float> Ind; 00031 00032 main(int argc, char *argv[]) { 00033 unsigned mu, lambda; 00034 bool comma; 00035 00036 // Create the command-line parser 00037 Parser parser( argc, argv, "Basic EA for vector<float> with adaptive mutations"); 00038 00039 //reproducible random seed - thanks, Maarten 00040 InitRandom(parser); 00041 00042 // a first Ind, reading its parameters from the parser 00043 // will be used later to inialize the whole population 00044 Ind FirstEO(parser); 00045 00046 // Evaluation 00047 // here we should call some parser-based constructor, 00048 // as many evaluation function need parameters 00049 // and also have some preliminary stuffs to do 00050 eoEvalFuncPtr<Ind> eval( real_value ); 00051 00052 // recombination and mutation operators, reading their parameters from the parser 00053 eoESMutate<float> MyMut(parser, 00054 FirstEO.StdDevLength(), FirstEO.size(), 00055 FirstEO.CorCffLength() ); 00056 00057 std::cout << "First EO " << FirstEO << std::endl; 00058 MyMut(FirstEO); 00059 std::cout << "First EO mutated" << FirstEO << std::endl; 00060 00061 /* 00062 // Evolution and population parameters 00063 eoScheme<Ind> the_scheme(parser); 00064 00065 // recombination and mutation operators, reading their parameters from the parser 00066 eoESReco<float> MyReco(parser, FirstEO); 00067 eoESMutate<float> MyMut(parser, FirstEO); 00068 00069 // termination conditions read by the parser 00070 eoTermVector<Ind> the_terms(parser); 00071 00072 // Initialization of the population 00073 // shoudl be called using the parser, in case you want to read from file(s) 00074 eoESRandomize<float> randomize; // an eoESInd randomnizer 00075 eoPop<Ind> pop(the_scheme.PopSize(), FirstEO, randomize); 00076 // eval(pop); // shoudl we call it from inside the constructor??? 00077 00078 // ALL parmeters have been read: write them out 00079 // Writing the parameters on arv[0].status 00080 // but of course this can be modified - see the example parser.cpp 00081 parser.outputParam(); 00082 // except the help parameter??? 00083 if( parser.getBool("-h" , "--help" , "Shows this help")) { 00084 parser.printHelp(); 00085 exit(1); 00086 } 00087 00088 unsigned i, iind; 00089 00090 00091 std::cout << "Initial population: \n" << std::endl; 00092 for (i = 0; i < pop.size(); ++i) { 00093 eval(pop[i]); 00094 std::cout << pop[i].fitness() << "\t" << pop[i] << std::endl; 00095 } 00096 00097 // the Operators 00098 eoSequentialOpHolder <Ind> seqholder; 00099 // seqholder.addOp(MyReco, 1.0); 00100 seqholder.addOp(MyMut, 1.0); 00101 00102 // One generation 00103 eoEvolStep<Ind> evol_scheme(the_scheme, seqholder, eval); 00104 00105 // the algorithm: 00106 eoFullEA<Ind> ea(evol_scheme, the_terms); 00107 00108 ea(pop); 00109 00110 std::cout << "Final population: \n" << std::endl; 00111 for (i = 0; i < pop.size(); ++i) 00112 std::cout << pop[i].fitness() << "\t" << pop[i] << std::endl; 00113 return 0; 00114 */ 00115 } 00116