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

📄 t-eoexternaleo.cpp

📁 这是linux下的进化计算的源代码。 === === === === === === === === === === === ===== check latest news at http:
💻 CPP
字号:
// to avoid long name warnings#ifdef _MSC_VER#pragma warning(disable:4786)#endif#include <iostream>#include <stdexcept>  // runtime_error #include <eoEvalFuncPtr.h>#include <other/external_eo>#include <utils/eoRNG.h>using namespace std;struct UserDefStruct{    int a;    float b;    double c;    enum Enum { just, another, test } d;};std::ostream& operator<<(std::ostream& os, const UserDefStruct& str){    return os << str.a << ' ' << str.b << ' ' << str.c << ' ' << static_cast<int>(str.d) << ' ';}istream& operator>>(istream& is, UserDefStruct& str){    is >> str.a;    is >> str.b;    is >> str.c;    int i;    is >> i;    str.d = static_cast<UserDefStruct::Enum>(i);    return is;}UserDefStruct RandomStruct(){    std::cout << "RandomStruct\n";    UserDefStruct result;    result.a = rng.random(5);    result.b = rng.uniform();    result.c = rng.uniform();    result.d = UserDefStruct::another;    return result;}// reading and writingbool UserDefMutate(UserDefStruct& a){    std::cout << "UserDefMutate\n";    a = RandomStruct(); // just for testing    if (rng.flip(0.1f))        a.d = UserDefStruct::test;    else        a.d = UserDefStruct::another;    return true;}bool UserDefBinCrossover(UserDefStruct& a, const UserDefStruct& b){    std::cout << "UserDefBinCrossover\n";    if (rng.flip(0.5))        a.a = b.a;    if (rng.flip(0.5))        a.b = b.b;    if (rng.flip(0.5))        a.c = b.c;    if (rng.flip(0.5))        a.d = b.d;    return true;}bool UserDefQuadCrossover(UserDefStruct& a, UserDefStruct& b){    std::cout << "UserDefQuadCrossover\n";    if (rng.flip(0.5))        swap(a.a, b.a);    if (rng.flip(0.5))        swap(a.b, b.b);    if (rng.flip(0.5))        swap(a.c, b.c);    if (rng.flip(0.5))        swap(a.d, b.d);    return true;}float UserDefEvalFunc(const UserDefStruct& a){    std::cout << "UserDefEvalFunc\n";    return a.b;}int main(){    typedef UserDefStruct External;    typedef float FitnessType;    typedef eoExternalEO<float, External> EoType;    eoExternalInit<FitnessType, External> init(RandomStruct);    eoExternalMonOp<FitnessType, External> mutate(UserDefMutate);    eoExternalBinOp<FitnessType, External> cross1(UserDefBinCrossover);    eoExternalQuadOp<FitnessType, External> cross2(UserDefQuadCrossover);    // eoExternalEvalFunc<FitnessType, External>   eval(UserDefEvalFunc);    EoType eo1;    init(eo1);    EoType eo2;    init(eo2);    std::cout << "before mutation " << eo1 << '\n';    mutate(eo1);    std::cout << "after mutation " << eo1 << '\n';    cross1(eo1, eo2);    std::cout << "after crossover " << eo1 << '\n';    cross2(eo1,eo2);};

⌨️ 快捷键说明

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