import java.util.Scanner; import java.util.Random; import java.util.ArrayList; public class GeneticAlgorithm { private static Random r = new Random(); public static ArrayList getRouletteWheel() { ArrayList rWheel = new ArrayList(); for (int i = 0; i <6; i++) { double value = Math.random(); rWheel.add(value); } return rWheel; } public static ArrayList getSelection(ArrayList Initial, ArrayList rWheel) { ArrayList Selection = new ArrayList(); for (int i = 0; i rWheel.get(i)) { cell = j; flag = false; } } Selection.add(Initial.get(cell)); } return Selection; } public static Chromosome crossOverHelper(Chromosome a, Chromosome b) { Chromosome c = new Chromosome(); ArrayList temp = new ArrayList(); for (int i = 0; i <2; i++) { temp.add(a.getGenes().get(i)); } for (int i = 2; i <4; i++) { temp.add(b.getGenes().get(i)); } c.setGenes(temp); return c; } public static ArrayList getCrossOver (ArrayList Selection) { ArrayList CrossOver = new ArrayList(); for (int i = 0; i <=5; i++) { System.out.println (i + " " + (i+1)); Chromosome c1 = crossOverHelper(Selection.get(i), Selection.get(i+1)); Chromosome c2 = crossOverHelper(Selection.get(i+1), Selection.get(i)); CrossOver.add(c1); CrossOver.add(c2); i +=1; } return CrossOver; } public static ArrayList getMutation (ArrayList cr) { int crID = r.nextInt(6); int position = r.nextInt(4); int number = r.nextInt(10) + 1; System.out.println ("crID = " + crID + " " + "Position = " + position + " " + "Number = " + number); Chromosome c = cr.get(crID); ArrayList list = c.getGenes(); list.set(position, number); return cr; } public static void main (String args []) { ArrayList Initial = new ArrayList(); boolean flag = true; int count = 0; for (int i = 0; i < 6; i++) { Chromosome c = new Chromosome(); c.initialize(); Initial.add(c); } while (flag) { count++; System.out.println ("Generation#" + count); for (int i = 0; i < 6 && flag; i++) { System.out.println ("Chromosome#" + (i+1)); Initial.get(i).printChromosome(); Initial.get(i).selectAndFitness(); System.out.println ("Selection = " + Initial.get(i).getSelection()); if (Initial.get(i).getSelection() == 0) { System.out.println ("Solution Found "); Chromosome c = Initial.get(i); System.out.println ("Answer = " ); c.printChromosome(); flag = false; } else { System.out.println ("Fitness = " + Initial.get(i).getFitness()); } } if (flag) { double total = 0; for (Chromosome c : Initial) { total += c.getFitness(); } for (Chromosome c : Initial) { double p = (c.getFitness())/total; c.setProbability(p); } for (int i = 0; i < 6; i++) { System.out.println ("Chromosome#" + (i+1)); System.out.println ("Probability = " + Initial.get(i).getProbability()); } System.out.println(); System.out.println ("Computing Cumulative Probabilities"); for (int i = 0; i <6; i++) { double sum = 0; for (int j = 0; j <= i; j++) { sum += Initial.get(j).getProbability(); } Initial.get(i).setCumulativeProbability(sum); } System.out.println(); System.out.println ("Computing Cumulative Probabilities"); for (int i = 0; i < 6; i++) { System.out.println ("Chromosome#" + (i+1)); System.out.println ("Cumulative Probability = " + Initial.get(i).getCumulativeProbability()); } System.out.println(); System.out.println ("Computing Roulette Wheel"); ArrayList rWheel = getRouletteWheel(); for (double i : rWheel) { System.out.println(i); } Initial = getSelection(Initial, rWheel); System.out.println ("Selected Chromosomes"); for (int i = 0; i < 6; i++) { Initial.get(i).printChromosome(); System.out.println(); } System.out.println ("Crossover Chromosomes"); Initial = getCrossOver( Initial); for (int i = 0; i < 6; i++) { Initial.get(i).printChromosome(); System.out.println(); } System.out.println ("After Mutation"); Initial = getMutation(getMutation (Initial)); for (int i = 0; i < 6; i++) { Initial.get(i).printChromosome(); System.out.println(); } } } } }