// The Blues // // Chromosome to store 10 bit integer representation and assigned colour. // // Author Matthew Caryl // Created 2.5.97 // // Although under copywrite to the author (Matthew Caryl) this code can be copied and modified for non-commercial // purposes as long as any derivatives contain this condition. package Blues; import java.awt.Color; import ADT.Random; final class Chromosome { private static int chromosomeLength = 10; private boolean[] genes; private static Color bestColor = Color.blue; private static Color okColor = Color.red; private static Color poorColor = Color.magenta; private static Color badColor = Color.black; // Create random gene public Chromosome(World w) { genes = new boolean[chromosomeLength]; for (int i = 0; i < chromosomeLength; i++) genes[i] = w.random().range(2) == 1; } // Copy parent and mutate public Chromosome(World w, Chromosome parent) { int i; int mutate = w.random().range(chromosomeLength); genes = new boolean[chromosomeLength]; for (i = 0; i < chromosomeLength; i++) genes[i] = parent.genes[i]; genes[mutate] = !genes[mutate]; } // Crossover parents public Chromosome(World w, Chromosome parent1, Chromosome parent2) { int i; int cross = w.random().range(chromosomeLength); genes = new boolean[chromosomeLength]; for (i = 0; i < cross; i++) genes[i] = parent1.genes[i]; for (i = cross; i < chromosomeLength; i++) genes[i] = parent2.genes[i]; } // Return evaluation based on first two bits public int evaluation(World w) { boolean o1 = genes[0]; boolean o2 = genes[1]; if (o1) { if (o2) { return w.blue_value; } else { return w.black_value; } } else { if (o2) { return w.purple_value; } else { return w.red_value; } } } // Return colour based on first two bits public Color color() { boolean o1 = genes[0]; boolean o2 = genes[1]; if (o1) { if (o2) { return bestColor; } else { return badColor; } } else { if (o2) { return poorColor; } else { return okColor; } } } }