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 }