/*
* This file is part of JGAP.
*
* JGAP offers a dual license model containing the LGPL as well as the MPL.
*
* For licensing information please see the file license.txt included with JGAP
* or have a look at the top of class org.jgap.Chromosome which representatively
* includes the JGAP license policy applicable for any file delivered with JGAP.
*/
package org.jgap.eval;
import java.io.*;
import java.util.*;
import org.jgap.*;
/**
* Container for holding a given number of populations. Serves as a history
* object for later evaluation.
*
* @author Klaus Meffert
* @since 2.0
*/
public class PopulationHistory
implements Serializable {
/** String containing the CVS revision. Read out via reflection!*/
private final static String CVS_REVISION = "$Revision: 1.7 $";
private List m_populations;
private int m_maxSize;
/**
* Constructor.
*
* @param a_maxSize the maximum number of Population objects to hold, or
* zero if there is no limit.
*
* @author Klaus Meffert
* @since 2.0
*/
public PopulationHistory(final int a_maxSize) {
m_populations = new Vector();
if (a_maxSize < 0) {
throw new IllegalArgumentException("Maximum size must be greater"
+ " or equal to zero!");
}
m_maxSize = a_maxSize;
}
public Population getPopulation(final int a_count) {
if (a_count >= m_populations.size()) {
return null;
}
else {
return (Population) m_populations.get(a_count);
}
}
/**
* Adds a population to the history. If the maximum size of this container
* is exceeded, then the population added earliest is removed.
*
* @param a_population the population to be added
*
* @author Klaus Meffert
* @since 2.0
*/
public void addPopulation(final Population a_population) {
if (a_population == null) {
throw new IllegalArgumentException("Population must not be null");
}
m_populations.add(0, a_population);
int popSize = m_populations.size();
if (m_maxSize != 0 && popSize > m_maxSize) {
m_populations.remove(popSize - 1);
}
}
/**
* @author Klaus Meffert
* @since 2.0
*/
public void removeAllPopulations() {
m_populations.removeAll(m_populations);
}
public int size() {
return m_populations.size();
}
public List getPopulations() {
return m_populations;
}
/**
* Sets the list of populations to the list provided.
*
* @param a_populations list of populations to be set
*
* @author Klaus Meffert
* @since 2.0
*/
public void setPopulations(final List a_populations) {
m_populations = a_populations;
int popSize = m_populations.size();
if (m_maxSize != 0 && popSize > m_maxSize) {
for (int i = m_maxSize; i < popSize; i++) {
m_populations.remove(m_maxSize);
}
}
}
/**
* @param a_other other object to compare to
* @return true other object seen as equal
*
* @author Klaus Meffert
* @since 3.5
*/
public boolean equals(Object a_other) {
PopulationHistory other = (PopulationHistory) a_other;
// if(other.m_maxSize != m_maxSize) {
// return false;
// }
for (int i = 0; i < size(); i++) {
Population pop1 = getPopulation(i);
Population pop2 = other.getPopulation(i);
if (!pop1.equals(pop2)) {
return false;
}
}
return true;
}
}