Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 13 additions & 22 deletions GA in Java/src/chapter2/Population.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package chapter2;

import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Random;
import java.util.List;


/**
Expand All @@ -15,7 +16,7 @@
*
*/
public class Population {
private Individual population[];
private List<Individual> population = new ArrayList<>();
private double populationFitness = -1;

/**
Expand All @@ -25,8 +26,6 @@ public class Population {
* The number of individuals in the population
*/
public Population(int populationSize) {
// Initial population
this.population = new Individual[populationSize];
}

/**
Expand All @@ -38,16 +37,13 @@ public Population(int populationSize) {
* The size of each individual's chromosome
*/
public Population(int populationSize, int chromosomeLength) {
// Initialize the population as an array of individuals
this.population = new Individual[populationSize];

// Create each individual in turn
for (int individualCount = 0; individualCount < populationSize; individualCount++) {
// Create an individual, initializing its chromosome to the given
// length
Individual individual = new Individual(chromosomeLength);
// Add individual to population
this.population[individualCount] = individual;
this.population.add( individual );
}
}

Expand All @@ -57,7 +53,7 @@ public Population(int populationSize, int chromosomeLength) {
* @return individuals Individuals in population
*/
public Individual[] getIndividuals() {
return this.population;
return (Individual[]) this.population.toArray();
}

/**
Expand All @@ -76,7 +72,7 @@ public Individual[] getIndividuals() {
*/
public Individual getFittest(int offset) {
// Order population by fitness
Arrays.sort(this.population, new Comparator<Individual>() {
Collections.sort(this.population, new Comparator<Individual>() {
@Override
public int compare(Individual o1, Individual o2) {
if (o1.getFitness() > o2.getFitness()) {
Expand All @@ -89,7 +85,7 @@ public int compare(Individual o1, Individual o2) {
});

// Return the fittest individual
return this.population[offset];
return this.population.get(offset);
}

/**
Expand Down Expand Up @@ -117,7 +113,7 @@ public double getPopulationFitness() {
* @return size The population's size
*/
public int size() {
return this.population.length;
return this.population.size();
}

/**
Expand All @@ -128,7 +124,8 @@ public int size() {
* @return individual
*/
public Individual setIndividual(int offset, Individual individual) {
return population[offset] = individual;
population.set(offset, individual);
return individual;
}

/**
Expand All @@ -138,7 +135,7 @@ public Individual setIndividual(int offset, Individual individual) {
* @return individual
*/
public Individual getIndividual(int offset) {
return population[offset];
return population.get(offset);
}

/**
Expand All @@ -148,12 +145,6 @@ public Individual getIndividual(int offset) {
* @return void
*/
public void shuffle() {
Random rnd = new Random();
for (int i = population.length - 1; i > 0; i--) {
int index = rnd.nextInt(i + 1);
Individual a = population[index];
population[index] = population[i];
population[i] = a;
}
Collections.shuffle(population);
}
}