
public class Ga1 {
	static int population=10;
 
	public static void main(String[] args) {
		Chromesome individual[]= new Chromesome[population];
		for(int i=0; i<population; i++) {
		individual[i]= new Chromesome();
			individual[i].randomize();
			individual[i].fitness= individual[i].score();
		}
		for(int i=0; i<300; i++) {
			Chromesome indiv_c= new Chromesome();
			int a= (int) (Math.random()*population);
			int b= (int) (Math.random()*population);
			indiv_c= individual[a].crossWith(individual[b]);
			indiv_c.mutation();
			indiv_c.fitness= indiv_c.score();
			if((individual[a].fitness> individual[b].fitness)&&
				(individual[b].fitness>indiv_c.fitness))
				individual[a]= indiv_c;
			if((individual[b].fitness> individual[a].fitness)&&
				(individual[a].fitness>indiv_c.fitness))
				individual[b]= indiv_c;
			if((individual[a].fitness> indiv_c.fitness)&&
				(indiv_c.fitness>individual[b].fitness))
				individual[a]= indiv_c;
			if((individual[b].fitness> indiv_c.fitness)&&
				(indiv_c.fitness>individual[a].fitness))
				individual[b]= indiv_c;	
		}
		for(int i=0; i<population; i++) {
			System.out.println(individual[i].gene[0]+";"+
				individual[i].gene[1]);
		}
	}



	private static class Chromesome {
		int[] gene= new int[2];
		double fitness;

		void randomize(){
		gene[0]= (int)(Math.random()*100.0);
		gene[1]= (int)(Math.random()*100.0);
		}
		Chromesome crossWith(Chromesome c) {
			Chromesome c_gene= new Chromesome();
			c_gene.gene[0]= gene[0];
			c_gene.gene[1]= c.gene[1];
			return (Chromesome)c_gene;
		}
		void mutation(){
			gene[0] += (int)(Math.random()*4)-2;
			gene[1] += (int)(Math.random()*4)-2;
		}
		double score(){
			double sco;
			sco= Math.abs((double)(gene[0] + gene[1])-30.0)+
 Math.abs((double)(gene[0] - gene[1])-10.0);
			return sco;
		}
	}
}

		