View Javadoc
1   /**
2    * @(#)UniformCrossover.java
3    * Copyright (C) 2008-2011 delhezi.com
4    *
5    * This class is released under the:
6    * GNU Lesser General Public License (LGPL) version 3 or later.
7    * http://www.gnu.org/copyleft/lesser.html
8    */
9   package com.delhezi.ga.crossover.standard;
10  
11  import com.delhezi.ga.Chromosome;
12  import java.util.Random;
13  import java.util.logging.Logger;
14  
15  /**
16   * <code>UniformCrossover</code>: Krzyżowanie równomierne
17   * Uniform Crossover (UX).
18   * @version 1.0 2009-06-10
19   * @author <a href="mailto:wojciech.wolszczak@delhezi.com">
20   * Wojciech Wolszczak</a>
21   */
22  public class UniformCrossover implements com.delhezi.ga.crossover.ICrossover {
23  
24      /** Logger object. */
25      private static final Logger LOGGER =
26          Logger.getLogger(UniformCrossover.class.getName());
27  
28      /** Delhezi Error Code. */
29      //private static final String DERC = "1-1.3-6-";
30  
31      /** Class name. */
32      private static final String CLASS_NAME = UniformCrossover.class.getName();
33  
34      /**
35       * Random.
36       */
37      private static Random random = new Random();
38  
39      /**
40       * Krzyżowanie.
41       * @param chromosome1 Chromosom.
42       * @param chromosome2 Chromosom.
43       * @since 1.0
44       */
45      public final void crossover(Chromosome chromosome1,
46                                  Chromosome chromosome2) {
47          LOGGER.entering(CLASS_NAME, "crossover",
48                          new Object[] { chromosome1, chromosome2 });
49  
50          Object tmpCh;
51          for (int i = 0; i < chromosome1.size(); i++) {
52              boolean b = random.nextFloat() > 0.5;
53              if (b) {
54                  tmpCh = chromosome1.getGene(i);
55                  chromosome1.setGene(i, chromosome2.getGene(i));
56                  chromosome2.setGene(i, tmpCh);
57              }
58          }
59          LOGGER.exiting(CLASS_NAME, "crossover",
60                         new Object[] { chromosome1, chromosome2 });
61      }
62  }