⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t-eoreplacement.cpp

📁 这是linux下的进化计算的源代码。 === === === === === === === === === === === ===== check latest news at http:
💻 CPP
字号:
//-----------------------------------------------------------------------------// to avoid long name warnings#ifdef _MSC_VER#pragma warning(disable:4786)#endif#include <stdexcept>  // runtime_error //-----------------------------------------------------------------------------// tt.cpp: ////-----------------------------------------------------------------------------// general#include <eo>//-----------------------------------------------------------------------------struct Dummy : public EO<double>{    typedef double Type;  void printOn(std::ostream & _os) const  {      _os << " - ";      EO<double>::printOn(_os);  }};struct eoDummyPop : public eoPop<Dummy>{public :    eoDummyPop(int s=0) { resize(s); }};//-----------------------------------------------------------------------------int the_main(int argc, char **argv){   eoParser parser(argc, argv);  eoValueParam<unsigned int> parentSizeParam(10, "parentSize", "Parent size",'P');  parser.processParam( parentSizeParam );    unsigned int pSize = parentSizeParam.value();  eoValueParam<unsigned int> offsrpringSizeParam(10, "offsrpringSize", "Offsrpring size",'O');  parser.processParam( offsrpringSizeParam );    unsigned int oSize = offsrpringSizeParam.value();  eoValueParam<unsigned int> tournamentSizeParam(2, "tournamentSize", "Deterministic tournament size",'T');  parser.processParam( tournamentSizeParam );    unsigned int tSize = tournamentSizeParam.value();  eoValueParam<double> tournamentRateParam(0.75, "tournamentRate", "Stochastic tournament rate",'R');  parser.processParam( tournamentRateParam );    double tRate = tournamentRateParam.value();  eoValueParam<double> sParentsElitismRateParam(0.1, "sParentsElitismRateParam", "Strong elitism rate for parents",'E');  parser.processParam( sParentsElitismRateParam );    double sParentsElitismRate = sParentsElitismRateParam.value();  eoValueParam<double> sParentsEugenismRateParam(0, "sParentsEugenismRateParam", "Strong Eugenism rate",'e');  parser.processParam( sParentsEugenismRateParam );    double sParentsEugenismRate = sParentsEugenismRateParam.value();  eoValueParam<double> sOffspringElitismRateParam(0, "sOffspringElitismRateParam", "Strong elitism rate for parents",'E');  parser.processParam( sOffspringElitismRateParam );    double sOffspringElitismRate = sOffspringElitismRateParam.value();  eoValueParam<double> sOffspringEugenismRateParam(0, "sOffspringEugenismRateParam", "Strong Eugenism rate",'e');  parser.processParam( sOffspringEugenismRateParam );    double sOffspringEugenismRate = sOffspringEugenismRateParam.value();    if (parser.userNeedsHelp())      {        parser.printHelp(std::cout);        exit(1);      }    unsigned i;    std::cout << "Testing the replacements\nParents SIze = " << pSize 	 << " and offspring size = " << oSize << std::endl;    rng.reseed(42);    eoDummyPop orgParents(pSize);    eoDummyPop orgOffspring(oSize);    // initialize so we can recognize them later!    for (i=0; i<pSize; i++)      orgParents[i].fitness(2*i+1);    for (i=0; i<oSize; i++)      orgOffspring[i].fitness(2*i);std::cout << "Initial parents (odd)\n" << orgParents << "\n And initial offsprings (even)\n" << orgOffspring << std::endl;    // now the ones we're going to play with    eoDummyPop parents(0);    eoDummyPop offspring(0);// the replacement procedures under test    eoGenerationalReplacement<Dummy> genReplace;    eoPlusReplacement<Dummy> plusReplace;    eoEPReplacement<Dummy> epReplace(tSize);    eoCommaReplacement<Dummy> commaReplace;    eoWeakElitistReplacement<Dummy> weakElitistReplace(commaReplace);    // the SSGA replacements    eoSSGAWorseReplacement<Dummy> ssgaWorseReplace;    eoSSGADetTournamentReplacement<Dummy> ssgaDTReplace(tSize);    eoSSGAStochTournamentReplacement<Dummy> ssgaDSReplace(tRate);    // here we go    // Generational    parents = orgParents;    offspring = orgOffspring;    std::cout << "eoGenerationalReplacement\n";    std::cout << "=========================\n";    genReplace(parents, offspring);std::cout << "Parents (originally odd)\n" << parents << "\n And offsprings (orogonally even\n" << offspring << std::endl;    // Plus    parents = orgParents;    offspring = orgOffspring;    std::cout << "eoPlusReplacement\n";    std::cout << "=================\n";    plusReplace(parents, offspring);std::cout << "Parents (originally odd)\n" << parents << "\n And offsprings (originally even)\n" << offspring << std::endl;    // EP (proche d'un PLUS    parents = orgParents;    offspring = orgOffspring;    std::cout << "eoEPReplacement\n";    std::cout << "===============\n";    epReplace(parents, offspring);std::cout << "Parents (originally odd)\n" << parents << "\n And offsprings (originally even)\n" << offspring << std::endl;    // Comma    parents = orgParents;    offspring = orgOffspring;    if (parents.size() > offspring.size() )	std::cout << "Skipping Comma Replacement, more parents than offspring\n";    else      {	std::cout << "eoCommaReplacement\n";	std::cout << "==================\n";	commaReplace(parents, offspring);	std::cout << "Parents (originally odd)\n" << parents << "\n And offsprings (originally even)\n" << offspring << std::endl;	// Comma with weak elitism	parents = orgParents;	offspring = orgOffspring;	std::cout << "The same, with WEAK elitism\n";	std::cout << "===========================\n";	weakElitistReplace(parents, offspring);	std::cout << "Parents (originally odd)\n" << parents << "\n And offsprings (originally even)\n" << offspring << std::endl;      }	// preparing SSGA replace worse	parents = orgParents;	offspring = orgOffspring;    if (parents.size() < offspring.size() )	std::cout << "Skipping all SSGA Replacements, more offspring than parents\n";    else      {	std::cout << "SSGA replace worse\n";	std::cout << "==================\n";	ssgaWorseReplace(parents, offspring);	std::cout << "Parents (originally odd)\n" << parents << "\n And offsprings (originally even)\n" << offspring << std::endl;    // SSGA deterministic tournament	parents = orgParents;	offspring = orgOffspring;	std::cout << "SSGA deterministic tournament\n";	std::cout << "=============================\n";	ssgaDTReplace(parents, offspring);	std::cout << "Parents (originally odd)\n" << parents << "\n And offsprings (originally even)\n" << offspring << std::endl;    // SSGA stochastic tournament	parents = orgParents;	offspring = orgOffspring;	std::cout << "SSGA stochastic tournament\n";	std::cout << "==========================\n";	ssgaDTReplace(parents, offspring);	std::cout << "Parents (originally odd)\n" << parents << "\n And offsprings (originally even)\n" << offspring << std::endl;      }    // the general replacement    eoDeterministicSaDReplacement<Dummy> sAdReplace(sParentsElitismRate, sParentsEugenismRate, sOffspringElitismRate, sOffspringEugenismRate);// 10% parents survive    parents = orgParents;    offspring = orgOffspring;    std::cout << "General - strong elitism\n";    std::cout << "========================\n";    sAdReplace(parents, offspring);    std::cout << "Parents (originally odd)\n" << parents << "\n And offsprings (originally even)\n" << offspring << std::endl;    return 1;}int main(int argc, char **argv){    try    {        the_main(argc, argv);    }    catch(std::exception& e)    {        std::cout << "Exception: " << e.what() << std::endl;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -