1 /**
2 * @(#)PopulationChangeableSize.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;
10
11 import com.delhezi.ga.crossover.ICrossover;
12 import com.delhezi.ga.crossover.factory.CrossoverFactory;
13 import com.delhezi.ga.crossover.factory.CrossoverOperatorType;
14 import com.delhezi.ga.exception.GeneticAlgorithmException;
15 import com.delhezi.ga.mutation.IMutation;
16 import com.delhezi.ga.mutation.factory.MutationFactory;
17 import com.delhezi.ga.mutation.factory.MutationOperatorType;
18 import com.delhezi.ga.selection.factory.SelectionMethodType;
19
20 import java.util.LinkedList;
21 import java.util.logging.Logger;
22
23 /**
24 * <code>PopulationChangeableSize</code>: Klasa populacji o zmiennej
25 * liczebności.
26 * @version 1.0 2009-06-10
27 * @author <a href="mailto:wojciech.wolszczak@delhezi.com">
28 * Wojciech Wolszczak</a>
29 */
30 public final class PopulationChangeableSize extends Population {
31 /** Logger object. */
32 private static final Logger LOGGER =
33 Logger.getLogger(PopulationChangeableSize.class.getName());
34
35 /** Delhezi Error Code. */
36 private static final String DERC = "1-7-";
37
38 /**
39 * Konstruktor.
40 * @param maxLT Największy dopuszczalny czas życia chromosomu.
41 * @param minLT Najmniejszy dopuszczalny czas życia chromosomu.
42 * @param chromosomes Lista chromosomów.
43 * @param crossoverOperator Operator krzyżowania.
44 * @param crossoverProbability Prawdopdobiestwo krzyżowania.
45 * @param mutationOperator Operator mutacji.
46 * @param mutationProbability Prawdopodobiestwo mutacji.
47 * @param chromosomeProperties Referencja do obiektu przechowującego
48 * parametry wspólne dla wszystkich chromosomów w ramach jednej
49 * instancji populacji.
50 * globalne dla instancji ustawienia.
51 * @throws GeneticAlgorithmException xxx
52 * @since 1.0
53 */
54 private PopulationChangeableSize(final int maxLT, final int minLT,
55 final LinkedList<Chromosome> chromosomes,
56 final ICrossover crossoverOperator,
57 final double crossoverProbability,
58 final IMutation mutationOperator,
59 final double mutationProbability,
60 final ChromosomeProperties chromosomeProperties)
61 throws GeneticAlgorithmException {
62 super(chromosomes, crossoverOperator, crossoverProbability,
63 mutationOperator, mutationProbability, chromosomeProperties);
64 //W konstruktorze i metodzie clone inicjuj bezposrednio
65 //wartości zmiennych lub wywołuj tylko metody final.
66 this.maxLT = maxLT;
67 this.minLT = minLT;
68 }
69
70 /**
71 * Statyczna metoda factory.
72 * @param maxLT Największy dopuszczalny czas życia chromosomu.
73 * @param minLT Najmniejszy dopuszczalny czas życia chromosomu.
74 * @param chromosomes Lista chromosomów.
75 * @param crossoverOperator Operator krzyżowania.
76 * @param crossoverProbability Prawdopdobiestwo krzyżowania.
77 * @param mutationOperator Operator mutacji.
78 * @param mutationProbability Prawdopodobiestwo mutacji.
79 * @param chromosomeProperties Referencja do obiektu przechowującego
80 * parametry wspólne dla wszystkich chromosomów w ramach jednej
81 * instancji populacji.
82 * @return Populacja o zmiennej liczebności.
83 * @throws GeneticAlgorithmException xxx
84 * @since 1.0
85 */
86 public static PopulationChangeableSize newPopulationChangeableSize(
87 final int maxLT,
88 final int minLT,
89 final LinkedList<Chromosome> chromosomes,
90 final CrossoverOperatorType crossoverOperator,
91 final double crossoverProbability,
92 final MutationOperatorType mutationOperator,
93 final double mutationProbability,
94 final ChromosomeProperties chromosomeProperties)
95 throws GeneticAlgorithmException {
96 return new PopulationChangeableSize(maxLT, minLT, chromosomes,
97 CrossoverFactory.getCrossoverOperator(crossoverOperator),
98 crossoverProbability,
99 MutationFactory.getMutationOperator(mutationOperator),
100 mutationProbability,
101 chromosomeProperties);
102 }
103
104 /**
105 * Statyczna metoda factory, pomocna przy przekształcaniu
106 * populacji o stałej liczebności na populację o zmiennej liczebności.
107 * @param maxLT Największy dopuszczalny czas życia chromosomu.
108 * @param minLT Najmniejszy dopuszczalny czas życia chromosomu.
109 * @param chromosomes Lista chromosomów.
110 * @param crossoverOperator Operator krzyżowania.
111 * @param crossoverProbability Prawdopdobiestwo krzyżowania.
112 * @param mutationOperator Operator mutacji.
113 * @param mutationProbability Prawdopodobiestwo mutacji.
114 * @param chromosomeProperties Referencja do obiektu przechowującego
115 * parametry wspólne dla wszystkich chromosomów w ramach jednej
116 * instancji populacji.
117 * @return Populacja o zmiennej liczebności.
118 * @throws GeneticAlgorithmException xxx
119 * @since 1.0
120 */
121 public static PopulationChangeableSize newPopulationChangeableSize(
122 final int maxLT,
123 final int minLT,
124 final LinkedList<Chromosome> chromosomes,
125 final ICrossover crossoverOperator,
126 final double crossoverProbability,
127 final IMutation mutationOperator,
128 final double mutationProbability,
129 final ChromosomeProperties chromosomeProperties)
130 throws GeneticAlgorithmException {
131 return new PopulationChangeableSize(maxLT, minLT, chromosomes,
132 crossoverOperator,
133 crossoverProbability,
134 mutationOperator,
135 mutationProbability,
136 chromosomeProperties);
137 }
138
139 /**
140 * Przekszta populację na populację o stałej liczebności.
141 * @param selectionMethod Typ metody selekcji.
142 * @return Funkcja celu.
143 * @throws GeneticAlgorithmException xxx
144 * @since 1.0
145 */
146 public PopulationConstantSize toPopulationConstantSize(
147 final SelectionMethodType selectionMethod)
148 throws GeneticAlgorithmException {
149 return PopulationConstantSize.newPopulationConstantSize(
150 selectionMethod, getChromosomes(), getCrossover(),
151 getCrossoverProbability(), getMutation(),
152 getMutationProbability(), getChromosomeProperties());
153 }
154
155 /**
156 * Tworzenie populacji: t+1 (wywołanie funkcji select,
157 * crossover i mutation).
158 * @throws GeneticAlgorithmException xxx
159 * @since 1.0
160 */
161 @Override
162 public void generation() throws GeneticAlgorithmException {
163 throw new UnsupportedOperationException("No implements yet");
164 }
165
166 /**
167 * Ustawia maksymalny czas życia dopuszczalny dla chromosomu.
168 * @param maxLT Maksymalny czas życia dopuszczalny dla chromosomu.
169 */
170 public void setMaxLT(final int maxLT) {
171 this.maxLT = maxLT;
172 }
173
174 /**
175 * Zwraca maksymalny czas życia dopuszczalny dla chromosomu.
176 * @return Maksymalny czas życia dopuszczalny dla chromosomu.
177 */
178 public int getMaxLT() {
179 return this.maxLT;
180 }
181
182 /**
183 * Ustawia minimalny czas życia dopuszczalny dla chromosomu.
184 * @param minLT Minimalny czas życia dopuszczalny dla chromosomu.
185 */
186 public void setMinLT(final int minLT) {
187 this.minLT = minLT;
188 }
189
190 /**
191 * Zwraca minimalny czas życia dopuszczalny dla chromosomu.
192 * @return Minimalny czas życia dopuszczalny dla chromosomu.
193 */
194 public int getMinLT() {
195 return this.minLT;
196 }
197
198 /**
199 * String charakteryzujący populację.
200 * @return String charakteryzujący populację.
201 * @since 1.0
202 */
203 @Override
204 public String toString() {
205 String str = "[Population:]";
206 return str;
207 }
208
209 /** Maksymalny czas życia dopuszczalny dla chromosomu. */
210 private int maxLT;
211
212 /** Minimalny czas życia dopuszczalny dla chromosomu. */
213 private int minLT;
214 }