#include #include #include #include #include #include #include #include using namespace std; // Třída pro logování výpočtů class Logovani { ofstream ofs; public: void open(int x) { stringstream name; name << "beh" << x << ".log"; ofs.open(name.str().c_str()); } void close() { ofs.close(); } void write(vector fitness, int it) { double mini = 99999999; double total = 0; for (int i=0; i &p) { int n = p.size(); for (int i=1; i > populace; vector fitness; // Dárci vector > darci; // Noví jedinci a jejich fitness vector > novi; vector novi_fitness; // Nejlepší jedinec a jeho fitness vector best; double best_fitness; // Fitness nejlepšího zalogovaného double best_log = 999999999; double W, H; int K; vector w; vector h; /* Ohodnocující funkce jedince */ /* Momentálně nastavená pro vývoj jedince, kde v[i] = i * Změňte v závislosti na vámi řešeném problému */ double ohodnot_jedince(vector v) { double res = 0; for (int i=0; i generuj_jedince(int k) { vector v(2*k); for (int i=0; i> N1; for (int i=0; i v(D); for (int j=0; j> v[j]; } populace.push_back(v); } ifs.close(); N = N0 + N1; // Spočítej jejich fitness fitness.clear(); fitness = vector(N); best_fitness = 9999999; int index = -1; for (int i=0; i(D); for (int i=0; i vytvor_darce(vector &p, vector &q, vector &r) { vector d(D); for (int i=0; i krizeni(vector &x, vector &d) { vector y(D); int j = rand()%K; // Náhodný gen, který se určitě vezme z dárce double pst = randdouble(); for (int i=0; i p(N); vector q(N); vector r(N); for (int i=0; i y = krizeni(populace[i], darci[i]); novi.push_back(y); novi_fitness.push_back(ohodnot_jedince(y)); } // Selekce -- vybere lepšího z původního a nového jedince int index = -1; for (int i=0; i best) { ofstream ofs("best.log"); ofs << "Fitness: " << best_fitness << endl; ofs << "Geny:" << endl; for (int i=0; i> W >> H; cin >> K; D = 2*K; for (int i=0; i> wi >> he; w.push_back(wi); h.push_back(he); } srand(time(NULL)); // Zadejte své datum narození jako DDMMYYYY // Spusť několik nezávislých běhů for (int b=0; b best_fitness) { zaloguj_nejlepsiho(best); } } return 0; }