1
2
3
4
5
6
7
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
22
23
24
25
26 public class CrossoverFactory {
27
28
29 private static final Logger LOGGER =
30 Logger.getLogger(CrossoverFactory.class.getName());
31
32
33 private static final String DERC = "1-1.1-1-";
34
35
36 private static final String CLASS_NAME = CrossoverFactory.class.getName();
37
38
39
40
41
42
43
44
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
70
71
72
73
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 }