void GeneticAlgorithm::run() {


    Population p = createBasePopulation();
    p.process();
    generations.push_back(p);

    double fitness = 0.001;
    int generation = 0;

    while(generation < params.generations){
        //p.printChromos();
        generation++;
        p = p.tournament_selection(generation);
        p.crossover_selection(params.crossoverPercent);
        p.mutation(params.mutationPercent);
        p.process();

        p.calcDiversity();
        //p.printBestCandidate();
       // std::cout << "Min Fitness: " << p.minFitness << std::endl;
       // std::cout << "Max Fitness: " << p.maxFitness << std::endl;

        generations.push_back(p);
     }

    generations.back().printBestCandidate();

    //resultToFile();
    resultAsJson();
}