package geneticAlgorithm;

import java.io.*;
import popcorn.*;

public class Main{
  static private Pop oldPop;
  static private Pop newPop;
  static private double avgFitness;
  static private Ind bestInd;
  static private Function function = new Function();
  static private int popSize = function.popSize();
  static private int generations = function.generations();
  static private int subGenerations = function.subGenerations();
  static private int subPopulations = function.subPopulations();
  
  public static void main(String[] args){
    function.start();
    
    newPop = new Pop(0);
    oldPop = new Pop(popSize);
    oldPop.calcFitness();
    function.printPop(oldPop);
    
    bestInd = oldPop.getBestInd();
    avgFitness = oldPop.getAvgFitness();
    
    for (int g = 0; g < generations; g++){
      System.err.println("g: " + g);
      
      if (function.finished(bestInd.getFitness())){
	System.out.println("solution found");
	break;
      }
      
      System.out.println("generation: " + g);
      
      newPop.reset();
      
      OnePopComputation computation = 
	new OnePopComputation(oldPop, newPop, popSize, 
			      subPopulations, subGenerations);
      computation.go();
      computation.collectAll();
      
      newPop.calcFitness();
      function.printPop(newPop);
      
      avgFitness = newPop.getAvgFitness();
      
      Pop tmpPop = newPop;
      newPop = oldPop;
      oldPop = tmpPop;
    }
    function.done();
  }
}

