PopulationChangeableSize.java

/**
 * @(#)PopulationChangeableSize.java
 * Copyright (C) 2008-2011 delhezi.com
 *
 * This class is released under the:
 * GNU Lesser General Public License (LGPL) version 3 or later.
 * http://www.gnu.org/copyleft/lesser.html
 */
package com.delhezi.ga;

import com.delhezi.ga.crossover.ICrossover;
import com.delhezi.ga.crossover.factory.CrossoverFactory;
import com.delhezi.ga.crossover.factory.CrossoverOperatorType;
import com.delhezi.ga.exception.GeneticAlgorithmException;
import com.delhezi.ga.mutation.IMutation;
import com.delhezi.ga.mutation.factory.MutationFactory;
import com.delhezi.ga.mutation.factory.MutationOperatorType;
import com.delhezi.ga.selection.factory.SelectionMethodType;

import java.util.LinkedList;
import java.util.logging.Logger;

/**
 * <code>PopulationChangeableSize</code>: Klasa populacji o zmiennej
 * liczebności.
 * @version 1.0 2009-06-10
 * @author <a href="mailto:wojciech.wolszczak@delhezi.com">
 * Wojciech Wolszczak</a>
 */
public final class PopulationChangeableSize extends Population {
    /** Logger object. */
    private static final Logger LOGGER =
        Logger.getLogger(PopulationChangeableSize.class.getName());

    /** Delhezi Error Code. */
    private static final String DERC = "1-7-";

    /**
     * Konstruktor.
     * @param maxLT Największy dopuszczalny czas życia chromosomu.
     * @param minLT Najmniejszy dopuszczalny czas życia chromosomu.
     * @param chromosomes Lista chromosomów.
     * @param crossoverOperator Operator krzyżowania.
     * @param crossoverProbability Prawdopdobiestwo krzyżowania.
     * @param mutationOperator Operator mutacji.
     * @param mutationProbability Prawdopodobiestwo mutacji.
     * @param chromosomeProperties Referencja do obiektu przechowującego
     * parametry wspólne dla wszystkich chromosomów w ramach jednej
     * instancji populacji.
     * globalne dla instancji ustawienia.
     * @throws GeneticAlgorithmException xxx
     * @since 1.0
     */
    private PopulationChangeableSize(final int maxLT, final int minLT,
                               final LinkedList<Chromosome> chromosomes,
                               final ICrossover crossoverOperator,
                               final double crossoverProbability,
                               final IMutation mutationOperator,
                               final double mutationProbability,
                               final ChromosomeProperties chromosomeProperties)
    throws GeneticAlgorithmException {
        super(chromosomes, crossoverOperator, crossoverProbability,
              mutationOperator, mutationProbability, chromosomeProperties);
        //W konstruktorze i metodzie clone inicjuj bezposrednio
        //wartości zmiennych lub wywołuj tylko metody final.
        this.maxLT = maxLT;
        this.minLT = minLT;
        }

    /**
     * Statyczna metoda factory.
     * @param maxLT Największy dopuszczalny czas życia chromosomu.
     * @param minLT Najmniejszy dopuszczalny czas życia chromosomu.
     * @param chromosomes Lista chromosomów.
     * @param crossoverOperator Operator krzyżowania.
     * @param crossoverProbability Prawdopdobiestwo krzyżowania.
     * @param mutationOperator Operator mutacji.
     * @param mutationProbability Prawdopodobiestwo mutacji.
     * @param chromosomeProperties Referencja do obiektu przechowującego
     * parametry wspólne dla wszystkich chromosomów w ramach jednej
     * instancji populacji.
     * @return Populacja o zmiennej liczebności.
     * @throws GeneticAlgorithmException xxx
     * @since 1.0
     */
    public static PopulationChangeableSize newPopulationChangeableSize(
                final int maxLT,
                final int minLT,
                final LinkedList<Chromosome> chromosomes,
                final CrossoverOperatorType crossoverOperator,
                final double crossoverProbability,
                final MutationOperatorType mutationOperator,
                final double mutationProbability,
                final ChromosomeProperties chromosomeProperties)
    throws GeneticAlgorithmException {
        return new PopulationChangeableSize(maxLT, minLT, chromosomes,
                     CrossoverFactory.getCrossoverOperator(crossoverOperator),
                                            crossoverProbability,
                     MutationFactory.getMutationOperator(mutationOperator),
                                            mutationProbability,
                                            chromosomeProperties);
        }

  /**
   * Statyczna metoda factory, pomocna przy przekształcaniu
   * populacji o stałej liczebności na populację o zmiennej liczebności.
   * @param maxLT Największy dopuszczalny czas życia chromosomu.
   * @param minLT Najmniejszy dopuszczalny czas życia chromosomu.
   * @param chromosomes Lista chromosomów.
   * @param crossoverOperator Operator krzyżowania.
   * @param crossoverProbability Prawdopdobiestwo krzyżowania.
   * @param mutationOperator Operator mutacji.
   * @param mutationProbability Prawdopodobiestwo mutacji.
   * @param chromosomeProperties Referencja do obiektu przechowującego
   * parametry wspólne dla wszystkich chromosomów w ramach jednej
   * instancji populacji.
   * @return Populacja o zmiennej liczebności.
   * @throws GeneticAlgorithmException xxx
   * @since 1.0
   */
  public static PopulationChangeableSize newPopulationChangeableSize(
              final int maxLT,
              final int minLT,
              final LinkedList<Chromosome> chromosomes,
              final ICrossover crossoverOperator,
              final double crossoverProbability,
              final IMutation mutationOperator,
              final double mutationProbability,
              final ChromosomeProperties chromosomeProperties)
  throws GeneticAlgorithmException {
      return new PopulationChangeableSize(maxLT, minLT, chromosomes,
                                          crossoverOperator,
                                          crossoverProbability,
                                          mutationOperator,
                                          mutationProbability,
                                          chromosomeProperties);
    }

    /**
     * Przekszta populację na populację o stałej liczebności.
     * @param selectionMethod Typ metody selekcji.
     * @return Funkcja celu.
     * @throws GeneticAlgorithmException xxx
     * @since 1.0
     */
    public PopulationConstantSize toPopulationConstantSize(
                                final SelectionMethodType selectionMethod)
    throws GeneticAlgorithmException {
        return PopulationConstantSize.newPopulationConstantSize(
                  selectionMethod, getChromosomes(), getCrossover(),
                  getCrossoverProbability(), getMutation(),
                  getMutationProbability(), getChromosomeProperties());
    }

    /**
     * Tworzenie populacji: t+1 (wywołanie funkcji select,
     * crossover i mutation).
     * @throws GeneticAlgorithmException xxx
     * @since 1.0
     */
    @Override
    public void generation() throws GeneticAlgorithmException {
      throw new UnsupportedOperationException("No implements yet");
    }

    /**
     * Ustawia maksymalny czas życia dopuszczalny dla chromosomu.
     * @param maxLT Maksymalny czas życia dopuszczalny dla chromosomu.
     */
    public void setMaxLT(final int maxLT) {
        this.maxLT = maxLT;
    }

    /**
     * Zwraca maksymalny czas życia dopuszczalny dla chromosomu.
     * @return Maksymalny czas życia dopuszczalny dla chromosomu.
     */
    public int getMaxLT() {
        return this.maxLT;
    }

    /**
     * Ustawia minimalny czas życia dopuszczalny dla chromosomu.
     * @param minLT Minimalny czas życia dopuszczalny dla chromosomu.
     */
    public void setMinLT(final int minLT) {
        this.minLT = minLT;
    }

    /**
     * Zwraca minimalny czas życia dopuszczalny dla chromosomu.
     * @return Minimalny czas życia dopuszczalny dla chromosomu.
     */
    public int getMinLT() {
        return this.minLT;
    }

    /**
     * String charakteryzujący populację.
     * @return String charakteryzujący populację.
     * @since 1.0
     */
    @Override
    public String toString() {
        String str = "[Population:]";
        return str;
    }

    /** Maksymalny czas życia dopuszczalny dla chromosomu. */
    private int maxLT;

    /** Minimalny czas życia dopuszczalny dla chromosomu. */
    private int minLT;
}