Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package A2Q2;
- public class geneticAlgorithm {
- private int N;
- private Chromosome[] chromArray;
- private int generation = 1;
- public geneticAlgorithm(int N) {
- this.N = N;
- this.chromArray = new Chromosome[N];
- }
- public void selection() {
- chromArray = generateFitness(chromArray);
- chromArray = maxFitness(chromArray);
- }
- public void crossOver() {
- int x = (int) (chromArray[0].getX() + chromArray[1].getX()) / 2;
- int y = (int) (chromArray[0].getY() + chromArray[1].getY()) / 2;
- Chromosome child = new Chromosome(x, y, 10000 - (x + y));
- chromArray[2] = child;
- }
- public void mutation() {
- int random = (int) (Math.random() * 3) + 1;
- int random_2 = (int) (Math.random() * 2) + 1;
- if (random == 1) {
- int randX = (int) (Math.random() * 50) + 1;
- if (chromArray[2].getX() < randX) {
- return;
- }
- chromArray[2].setX(chromArray[2].getX() - randX);
- if (random_2 == 1)
- chromArray[2].setY(chromArray[2].getY() + randX);
- else
- chromArray[2].setN(chromArray[2].getN() + randX);
- } else if (random == 2) {
- int randY = (int) (Math.random() * 50) + 1;
- if (chromArray[2].getY() < randY) {
- return;
- }
- chromArray[2].setY(chromArray[2].getY() - randY);
- if (random_2 == 1)
- chromArray[2].setX(chromArray[2].getX() + randY);
- else
- chromArray[2].setN(chromArray[2].getN() + randY);
- } else {
- int randUnused = (int) (Math.random() * 50) + 1;
- if (chromArray[2].getN() < randUnused) {
- return;
- }
- chromArray[2].setN(chromArray[2].getN() - randUnused);
- if (random_2 == 1)
- chromArray[2].setX(chromArray[2].getX() + randUnused);
- else
- chromArray[2].setY(chromArray[2].getY() + randUnused);
- }
- chromArray = generateFitness(chromArray);
- }
- public Chromosome[] maxFitness(Chromosome[] chrom) {
- Chromosome[] chrom2 = new Chromosome[3];
- for (int i = 0; i < chrom.length; i++) {
- if (chrom2[0] == null
- || chrom[i].getFitness() > chrom2[0].getFitness()) {
- chrom2[1] = chrom2[0];
- chrom2[0] = chrom[i];
- } else if (chrom2[1] == null
- || chrom[i].getFitness() > chrom2[1].getFitness()) {
- chrom2[1] = chrom[i];
- }
- }
- return chrom2;
- }
- public void generateStart() {
- for (int i = 0; i < N; i++) {
- chromArray[i] = new Chromosome(i * 1000, 10000 - i * 1000, 0);
- }
- }
- public Chromosome[] generateFitness(Chromosome[] chrom) {
- for (int i = 0; i < chrom.length; i++) {
- int x = chrom[i].getX();
- int y = chrom[i].getY();
- int fitness = -((x - 3750) * (x - 3750)) + 570 * x - 2 * (y - 5000)
- * (y - 5000) + 1500 * y + 25;
- chrom[i].setFitness(fitness);
- }
- return chrom;
- }
- public void optimize() {
- generateStart();
- while (true) {
- if (chromArray[2].getFitness() == 10000000)
- return;
- //System.out.println("PARENT 1 FITNESS: "
- //+ chromArray[0].getFitness());
- //System.out.println(chromArray[0].getX());
- //System.out.println("PARENT 2 FITNESS: "
- //+ chromArray[1].getFitness());
- //System.out.println(chromArray[1].getX());
- //System.out.println("Child FITNESS: " + chromArray[2].getFitness());
- //System.out.println(chromArray[2].getX());
- selection();
- crossOver();
- mutation();
- generation++;
- //System.out.println("GENERATION" +generation);
- }
- }
- public int getN() {
- return N;
- }
- public void setN(int n) {
- N = n;
- }
- public Chromosome[] getChromArray() {
- return chromArray;
- }
- public void setChromArray(Chromosome[] chromArray) {
- this.chromArray = chromArray;
- }
- public int getGeneration() {
- return generation;
- }
- public void setGeneration(int generation) {
- this.generation = generation;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement