/*
ga2main.cc
Selah Lynch July '04
*/

#include <mpi.h>
#include <fstream.h>
#include "population.h"
#include "problem.h"
#include "ga2.h"

Solution& Solve(Problem& p, Solution* sol, int mr);
//takes p and approximates a solution for it using
//a genetic algorithm


main(int cnt, char **args){
  MPI_Init(&cnt,&args);
  int myrank, ROOT=0;
  MPI_Comm_rank(MPI_COMM_WORLD, &myrank);

  char* filename = "points.data";

  Problem p(filename);
  Solution s(p.GetNumPoints()), *slnptr;

  if(myrank==ROOT){
    cout<<"\nHello, this is a Genetic Algorithm to connect dots in a minimum distance.\n";
    cout<<"Points read from file '"<< filename<<"'\n";
  }
  s.SetAsEqual(Solve(p,slnptr,myrank));

  if(myrank==ROOT){
    cout<<"The solution to the following problem:\n";
    p.Display();
    cout<<"\nis:\n";
    s.Display();

    cout<<"\n\nUse data files '"<<filename<<"' and 'solutions.data' with visualizer.\n";
    cout<<"Good Bye!\n\n";
  }

  MPI_Finalize();
}



Solution& Solve(Problem& prob, Solution* sol, /*DELETE THIS*/int myrank){
  Population pop(30, prob);
  GAProb ga(prob, pop);
  ga.SetVariables(60,20);
  ga.RunTillDone(200);
  sol=new Solution(ga.BestSlnOverTime());
  return *sol;
}
