01: /*
02: * This file is part of JGAP.
03: *
04: * JGAP offers a dual license model containing the LGPL as well as the MPL.
05: *
06: * For licensing information please see the file license.txt included with JGAP
07: * or have a look at the top of class org.jgap.Chromosome which representatively
08: * includes the JGAP license policy applicable for any file delivered with JGAP.
09: */
10: package org.jgap;
11:
12: import java.io.*;
13: import java.util.*;
14:
15: /**
16: * A GeneticOperator represents an operation that takes place on
17: * a population of Chromosomes during the evolution process. Examples
18: * of genetic operators include reproduction, crossover, and mutation.
19: * This interface contains only one method - operate() - which is responsible
20: * for performing the genetic operation on the current population of
21: * Chromosomes.
22: *
23: * @author Neil Rotstan
24: * @author Klaus Meffert
25: * @since 1.0
26: */
27: public interface GeneticOperator extends Serializable {
28:
29: /** String containing the CVS revision. Read out via reflection!*/
30: final static String CVS_REVISION = "$Revision: 1.16 $";
31:
32: /**
33: * The operate method will be invoked on each of the genetic operators
34: * referenced by the current Configuration object during the evolution
35: * phase. Operators are given an opportunity to run in the order that
36: * they are added to the Configuration. Implementations of this method
37: * may reference the population of Chromosomes as it was at the beginning
38: * of the evolutionary phase and/or they may instead reference the
39: * candidate Chromosomes, which are the results of prior genetic operators.
40: * In either case, only Chromosomes added to the list of candidate
41: * chromosomes will be considered for natural selection.
42: *
43: * The parameters a_population and a_candidateChromosomes may refer to the same
44: * list of chromosomes for performance issues. Thus would mean an in-place
45: * modification. In ealier JGAP versions it was suggested never modifying the
46: * input population. Please refer to implementations delivered with JGAP to
47: * get a picture of the way non-susceptible in-place modifications are
48: * possible. If wrongly done, ConcurrentModificationException could be risen
49: * when accessing the population by an iterator in a GeneticOperator.
50: * Or, if population.getChromosomes().size() was used inside a loop where
51: * chromosomes were added to the input population this could lead to an
52: * infinite loop in worst case.
53: *
54: * @param a_population the population of chromosomes from the current
55: * evolution prior to exposure to any genetic operators. Chromosomes in this
56: * array should not be modified. Please, notice, that the call in
57: * Genotype.evolve() to the implementations of GeneticOperator overgoes this
58: * due to performance issues
59: * @param a_candidateChromosomes the pool of chromosomes that have been
60: * selected for the next evolved population
61: *
62: * @author Neil Rotstan
63: * @author Klaus Meffert
64: * @since 2.0 (earlier versions referenced the Configuration object)
65: */
66: public void operate(final Population a_population,
67: final List a_candidateChromosomes);
68: }
|