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