View Javadoc
1   /**
2    * @(#)CrossoverFactory.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.factory;
10  
11  import com.delhezi.ga.crossover.ICrossover;
12  import com.delhezi.ga.crossover.permutation.OrderCrossover;
13  import com.delhezi.ga.crossover.permutation.PartiallyMatchedCrossover;
14  import com.delhezi.ga.crossover.standard.KPointCrossover;
15  import com.delhezi.ga.crossover.standard.UniformCrossover;
16  import com.delhezi.ga.exception.GeneticAlgorithmException;
17  import java.util.logging.Level;
18  import java.util.logging.Logger;
19  
20  /**
21   * Sparametryzowana metoda wytwórcza operatora krzyżowania.
22   * @version 1.0 2009-06-10
23   * @author <a href="mailto:wojciech.wolszczak@delhezi.com">
24   * Wojciech Wolszczak</a>
25   */
26  public class CrossoverFactory {
27  
28      /** Logger object. */
29      private static final Logger LOGGER =
30          Logger.getLogger(CrossoverFactory.class.getName());
31  
32      /** Delhezi Error Code. */
33      private static final String DERC = "1-1.1-1-";
34  
35      /** Class name. */
36      private static final String CLASS_NAME = CrossoverFactory.class.getName();
37  
38      /**
39       * Tworzy nowy obiekt operatora krzyżowania i zwraca referencję do niego.
40       * @param crossoverOperator Określa typ tworzonego obiektu
41       * operatora krzyżowania.
42       * @return Referencja do obiektu operatora krzyżowania.
43       * @throws GeneticAlgorithmException DERC-1-1.1-1-1
44       * @since 1.0
45       */
46      public static ICrossover getCrossoverOperator(final CrossoverOperatorType crossoverOperator) throws GeneticAlgorithmException {
47          LOGGER.entering(CLASS_NAME, "getCrossoverOperator", crossoverOperator);
48          switch (crossoverOperator) {
49          case OrderCrossover:
50              return new OrderCrossover();
51          case PartiallyMatchedCrossover:
52              return new PartiallyMatchedCrossover();
53          case KPointCrossover:
54              return new KPointCrossover();
55          case UniformCrossover:
56              return new UniformCrossover();
57          }
58  
59          GeneticAlgorithmException e =
60              new GeneticAlgorithmException("DERC-" + DERC +
61                                            "1: Parametr crossoverOperator=" +
62                                            crossoverOperator +
63                                            " is not recognized.");
64          LOGGER.log(Level.WARNING, "CrossoverFactory", e);
65          throw e;
66      }
67  
68      /**
69       * Zwraca typ operatora krzyżowania określony dla parametru.
70       * @param crossoverOperator Referencja do obiektu operatora krzyżowania.
71       * @return Typ operatora krzyżowania.
72       * @throws GeneticAlgorithmException DERC-1-1.1-1-2
73       * @since 1.0
74       */
75      public static CrossoverOperatorType getCrossoverOperatorType(final ICrossover crossoverOperator) throws GeneticAlgorithmException {
76          LOGGER.entering(CLASS_NAME, "getCrossoverOperatorType",
77                          crossoverOperator);
78  
79          String pClassName = crossoverOperator.getClass().getName();
80  
81          if (pClassName.equals("com.delhezi.ga.crossover.permutation.OrderCrossover")) {
82              return CrossoverOperatorType.OrderCrossover;
83          } else if (pClassName.equals("com.delhezi.ga.crossover.permutation.PartiallyMatchedCrossover")) {
84              return CrossoverOperatorType.PartiallyMatchedCrossover;
85          } else if (pClassName.equals("com.delhezi.ga.crossover.standard.KPointCrossover")) {
86              return CrossoverOperatorType.KPointCrossover;
87          } else if (pClassName.equals("com.delhezi.ga.crossover.standard.UniformCrossover")) {
88              return CrossoverOperatorType.UniformCrossover;
89          }
90  
91          GeneticAlgorithmException e =
92              new GeneticAlgorithmException("DERC-" + DERC +
93                                            "2: Parametr crossoverOperator=" +
94                                            pClassName + " is not recognized.");
95          LOGGER.log(Level.WARNING, "CrossoverFactory", e);
96          throw e;
97      }
98  }