diff options
Diffstat (limited to 'src/jcgp/backend/population/Population.java')
-rw-r--r-- | src/jcgp/backend/population/Population.java | 53 |
1 files changed, 43 insertions, 10 deletions
diff --git a/src/jcgp/backend/population/Population.java b/src/jcgp/backend/population/Population.java index 7049d79..7b62d27 100644 --- a/src/jcgp/backend/population/Population.java +++ b/src/jcgp/backend/population/Population.java @@ -6,27 +6,41 @@ import jcgp.JCGP.Resources; public class Population { private Chromosome[] chromosomes; - private int fittest; + private Resources resources; + /** + * Initialise a random population according to the parameters specified + * in the resources. + * + * @param resources the CGP resources + */ public Population(Resources resources) { + this.resources = resources; + chromosomes = new Chromosome[(resources.getInt("popSize"))]; for (int c = 0; c < chromosomes.length; c++) { chromosomes[c] = new Chromosome(resources); } } + /** + * Initialise a population of copies of the given chromosome. + * + * @param parent + * @param resources + */ public Population(Chromosome parent, Resources resources) { + this.resources = resources; + chromosomes = new Chromosome[(resources.getInt("popSize"))]; - // make a clone for safety - this.chromosomes[0] = new Chromosome(parent); // generate the rest of the individuals - for (int c = 1; c < chromosomes.length; c++) { - chromosomes[c] = new Chromosome(chromosomes[0]); + for (int c = 0; c < chromosomes.length; c++) { + chromosomes[c] = new Chromosome(parent); } } /** - * Returns all chromosomes, parents first, then offspring. + * Returns the indexed chromosome. * * @param index * @return @@ -35,11 +49,30 @@ public class Population { return chromosomes[index]; } - public void setBestIndividual(int index) { - fittest = index; + /** + * @return a random chromosome from this population. + */ + public Chromosome getRandomChromosome() { + return chromosomes[resources.getRandomInt(chromosomes.length)]; } + - public Chromosome getBestIndividual() { - return chromosomes[fittest]; + /** + * Copy a chromosome into a different position. + * After this returns, the target chromosome has + * identical connections and functions to the source + * one, though they are separate instances. + * + * This method does nothing if source == target. + * + * @param source + * @param target + */ + public void copyChromosome(int source, int target) { + if (source != target) { + chromosomes[target].copyGenes(chromosomes[source]); + } } + + } |