#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<random>
#include<fstream>
#include<chrono>
#include "graph.h"

using namespace std;


int main(int argc, char *argv[]){
  srand(0);

  int number_vertices = 10000;
  float initial_p = 0.0;
  float productivity = 1.5;  //Productivity is b/c.
  bool just_one = false;
  bool mutation_examination = true;
  float strength_of_selection = 1;

  int support_of_big=15;

  //int repeats = 5*10000;
  int repeats = 1000;
  float mutation_rate = 0.0001;

  Setting st = Setting(number_vertices, productivity, initial_p, dB_Moran,mutation_examination,support_of_big,just_one,strength_of_selection);
  st.set_mutation_rate(mutation_rate);
  //Booster g = Booster(st);
  ///////////RandomBooster g = RandomBooster(st);
  //OldBooster g = OldBooster(st);
  ImperfectStar g = ImperfectStar(st);
  //Star g = Star(st);
  //RingOfStars g = RingOfStars(st);
  //Grid g = Grid(st); //Needs 100x100 vertices

  cout<<"(number_vertices, productivity, initial_p, dB_Moran,mutation_examination,support_of_big,just_one,strength_of_selection, mutation_rate);; repeats="<<repeats<<endl;
  cout<<number_vertices<<";"<<productivity<<" "<<initial_p<<" "<<dB_Moran<<" "<<mutation_examination<<";"<<support_of_big<<";"<<just_one<<";"<<strength_of_selection<<";"<<mutation_rate<<endl;
  //int sum = 0;
  long long steps = 0;
  for(int a = 0; a < repeats; a++){
    cout<<"run "<<a<<endl;
    g.reset_everything();
    g.run_logging(300000000,1000000);
    steps += g.get_steps();
    //cout<<number_vertices<<" "<<initial_p<<" "<<productivity<<" "<<repeats<<" "<<sum/(float)repeats<<endl;
  }
  return 0;
}
