View Javadoc
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 }