#include <iostream>
#include <cstdlib>
#include <ctime>
#include <numeric>
#include <algorithm>
#include <vector>
#include <random>
#include <chrono>
#include <cmath>
#include <windows.h>

#include <limits>
#include <fstream>
#include <sstream>
#include <stdlib.h>

#include "heuristics/RLS.h"
#include "heuristics/EA.h"
#include "heuristics/PEA.h"
#include "analysis/analysis.h"

#include "experiences/complexity-rls.h"
#include "experiences/complexity-ea.h"
#include "experiences/complexity-ga.h"
#include "experiences/crossover-rate.h"

#include "experiences/scripts.h"
#include "experiences/bestPGA.h"
#include "experiences/bestPEA.h"

using namespace std;

int main(int argc, char** argv) {
    srand(time(NULL));
    std::default_random_engine randomizer{static_cast<long unsigned int>(time(0))};
    study_complexity_of_ga_treat(randomizer, "bin/Release/complexity-ga.csv", 3, 30);
    return 0;
    if(argc >= 2) {
        int num_experiment = atoi(argv[1]);
        switch(num_experiment) {
            case 1:
                cout << "Experiment: Optimal Crossover probability" << endl;
                crossover_model(randomizer, atoi(argv[2]), argc, argv);
                return 0;

            case 2:
                cout << "Experiment: RLS Complexity" << endl;
                study_complexity_of_rls(randomizer, atoi(argv[2]), argc, argv);
                return 0;

            case 3:
                cout << "Experiment: EA Complexity" << endl;
                study_complexity_of_ea(randomizer, atoi(argv[2]), argc, argv);
                return 0;

            case 4:
                cout << "Experiment: GA Complexity" << endl;
                study_complexity_of_ga(randomizer, atoi(argv[2]), argc, argv);
                return 0;
        }
    }

    return 0;
}
