Advertisement
Guest User

Untitled

a guest
Mar 3rd, 2015
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.67 KB | None | 0 0
  1. package A2Q2;
  2.  
  3.  
  4.  
  5. public class geneticAlgorithm {
  6.  
  7.     private int N;
  8.     private Chromosome[] chromArray;
  9.     private int generation = 1;
  10.  
  11.     public geneticAlgorithm(int N) {
  12.         this.N = N;
  13.         this.chromArray = new Chromosome[N];
  14.     }
  15.  
  16.     public void selection() {
  17.         chromArray = generateFitness(chromArray);
  18.         chromArray = maxFitness(chromArray);
  19.  
  20.     }
  21.  
  22.     public void crossOver() {
  23.         int x = (int) (chromArray[0].getX() + chromArray[1].getX()) / 2;
  24.         int y = (int) (chromArray[0].getY() + chromArray[1].getY()) / 2;
  25.         Chromosome child = new Chromosome(x, y, 10000 - (x + y));
  26.         chromArray[2] = child;
  27.        
  28.     }
  29.  
  30.     public void mutation() {
  31.         int random = (int) (Math.random() * 3) + 1;
  32.         int random_2 = (int) (Math.random() * 2) + 1;
  33.         if (random == 1) {
  34.             int randX = (int) (Math.random() * 50) + 1;
  35.             if (chromArray[2].getX() < randX) {
  36.                 return;
  37.             }
  38.             chromArray[2].setX(chromArray[2].getX() - randX);
  39.             if (random_2 == 1)
  40.                 chromArray[2].setY(chromArray[2].getY() + randX);
  41.             else
  42.                 chromArray[2].setN(chromArray[2].getN() + randX);
  43.         } else if (random == 2) {
  44.             int randY = (int) (Math.random() * 50) + 1;
  45.             if (chromArray[2].getY() < randY) {
  46.                 return;
  47.             }
  48.             chromArray[2].setY(chromArray[2].getY() - randY);
  49.             if (random_2 == 1)
  50.                 chromArray[2].setX(chromArray[2].getX() + randY);
  51.             else
  52.                 chromArray[2].setN(chromArray[2].getN() + randY);
  53.  
  54.         } else {
  55.             int randUnused = (int) (Math.random() * 50) + 1;
  56.             if (chromArray[2].getN() < randUnused) {
  57.                 return;
  58.             }
  59.             chromArray[2].setN(chromArray[2].getN() - randUnused);
  60.  
  61.             if (random_2 == 1)
  62.                 chromArray[2].setX(chromArray[2].getX() + randUnused);
  63.             else
  64.                 chromArray[2].setY(chromArray[2].getY() + randUnused);
  65.  
  66.         }
  67.         chromArray = generateFitness(chromArray);
  68.     }
  69.  
  70.     public Chromosome[] maxFitness(Chromosome[] chrom) {
  71.         Chromosome[] chrom2 = new Chromosome[3];
  72.         for (int i = 0; i < chrom.length; i++) {
  73.             if (chrom2[0] == null
  74.                     || chrom[i].getFitness() > chrom2[0].getFitness()) {
  75.                 chrom2[1] = chrom2[0];
  76.                 chrom2[0] = chrom[i];
  77.             } else if (chrom2[1] == null
  78.                     || chrom[i].getFitness() > chrom2[1].getFitness()) {
  79.                 chrom2[1] = chrom[i];
  80.             }
  81.         }
  82.  
  83.         return chrom2;
  84.     }
  85.  
  86.     public void generateStart() {
  87.         for (int i = 0; i < N; i++) {
  88.             chromArray[i] = new Chromosome(i * 1000, 10000 - i * 1000, 0);
  89.         }
  90.     }
  91.  
  92.     public Chromosome[] generateFitness(Chromosome[] chrom) {
  93.         for (int i = 0; i < chrom.length; i++) {
  94.             int x = chrom[i].getX();
  95.             int y = chrom[i].getY();
  96.             int fitness = -((x - 3750) * (x - 3750)) + 570 * x - 2 * (y - 5000)
  97.                     * (y - 5000) + 1500 * y + 25;
  98.             chrom[i].setFitness(fitness);
  99.         }
  100.         return chrom;
  101.  
  102.     }
  103.  
  104.     public void optimize() {
  105.         generateStart();
  106.         while (true) {
  107.             if (chromArray[2].getFitness() == 10000000)
  108.                 return;
  109.  
  110.             //System.out.println("PARENT 1 FITNESS: "
  111.                     //+ chromArray[0].getFitness());
  112.             //System.out.println(chromArray[0].getX());
  113.  
  114.             //System.out.println("PARENT 2 FITNESS: "
  115.                     //+ chromArray[1].getFitness());
  116.             //System.out.println(chromArray[1].getX());
  117.  
  118.             //System.out.println("Child FITNESS: " + chromArray[2].getFitness());
  119.             //System.out.println(chromArray[2].getX());
  120.  
  121.             selection();
  122.             crossOver();
  123.             mutation();
  124.             generation++;
  125.             //System.out.println("GENERATION" +generation);
  126.  
  127.         }
  128.     }
  129.  
  130.     public int getN() {
  131.         return N;
  132.     }
  133.  
  134.     public void setN(int n) {
  135.         N = n;
  136.     }
  137.  
  138.     public Chromosome[] getChromArray() {
  139.         return chromArray;
  140.     }
  141.  
  142.     public void setChromArray(Chromosome[] chromArray) {
  143.         this.chromArray = chromArray;
  144.     }
  145.  
  146.     public int getGeneration() {
  147.         return generation;
  148.     }
  149.  
  150.     public void setGeneration(int generation) {
  151.         this.generation = generation;
  152.     }
  153. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement