Make Population a typed ArrayList

This commit is contained in:
Fabian Becker 2014-11-07 22:45:06 +01:00
parent 1dedb13dc9
commit d778dc6e24
18 changed files with 57 additions and 60 deletions

View File

@ -152,14 +152,14 @@ public class GAESIndividualBinaryDoubleData extends AbstractEAIndividual impleme
numTmp = (AbstractEAIndividual) this.getNumbers();
numPop = new Population();
for (int i = 0; i < partners.size(); i++) {
numPop.add(((GAESIndividualBinaryDoubleData) partners.get(i)).getNumbers());
numPop.add((AbstractEAIndividual) ((GAESIndividualBinaryDoubleData) partners.get(i)).getNumbers());
}
resNum = numTmp.mateWith(numPop);
binTmp = (AbstractEAIndividual) this.getBitSet();
binPop = new Population();
for (int i = 0; i < partners.size(); i++) {
binPop.add(((GAESIndividualBinaryDoubleData) partners.get(i)).getBitSet());
binPop.add((AbstractEAIndividual) ((GAESIndividualBinaryDoubleData) partners.get(i)).getBitSet());
}
resBin = binTmp.mateWith(binPop);
@ -185,7 +185,7 @@ public class GAESIndividualBinaryDoubleData extends AbstractEAIndividual impleme
result = new AbstractEAIndividual[partners.size() + 1];
result[0] = (AbstractEAIndividual) this.clone();
for (int i = 0; i < partners.size(); i++) {
result[i + 1] = (AbstractEAIndividual) ((AbstractEAIndividual) partners.get(i)).clone();
result[i + 1] = (AbstractEAIndividual) (partners.get(i)).clone();
}
}
for (int i = 0; i < result.length; i++) {

View File

@ -144,14 +144,14 @@ public class GAPIndividualProgramData extends AbstractEAIndividual implements In
numTmp = (AbstractEAIndividual) this.getNumbers();
numPop = new Population();
for (int i = 0; i < partners.size(); i++) {
numPop.add(((GAPIndividualProgramData) partners.get(i)).getNumbers());
numPop.add((AbstractEAIndividual) ((GAPIndividualProgramData) partners.get(i)).getNumbers());
}
resNum = numTmp.mateWith(numPop);
binTmp = (AbstractEAIndividual) this.getProgramRepresentation();
binPop = new Population();
for (int i = 0; i < partners.size(); i++) {
binPop.add(((GAPIndividualProgramData) partners.get(i)).getProgramRepresentation());
binPop.add((AbstractEAIndividual) ((GAPIndividualProgramData) partners.get(i)).getProgramRepresentation());
}
resBin = binTmp.mateWith(binPop);
@ -166,7 +166,7 @@ public class GAPIndividualProgramData extends AbstractEAIndividual implements In
result = new AbstractEAIndividual[partners.size() + 1];
result[0] = (AbstractEAIndividual) this.clone();
for (int i = 0; i < partners.size(); i++) {
result[i + 1] = (AbstractEAIndividual) ((AbstractEAIndividual) partners.get(i)).clone();
result[i + 1] = (AbstractEAIndividual) (partners.get(i)).clone();
}
}
for (int i = 0; i < result.length; i++) {

View File

@ -148,14 +148,14 @@ public class GIOBGAIndividualIntegerPermutationData extends AbstractEAIndividual
numTmp = (AbstractEAIndividual) this.getIntegers();
numPop = new Population();
for (int i = 0; i < partners.size(); i++) {
numPop.add(((GIOBGAIndividualIntegerPermutationData) partners.get(i)).getIntegers());
numPop.add((AbstractEAIndividual) ((GIOBGAIndividualIntegerPermutationData) partners.get(i)).getIntegers());
}
resNum = numTmp.mateWith(numPop);
binTmp = (AbstractEAIndividual) this.getPermutations();
binPop = new Population();
for (int i = 0; i < partners.size(); i++) {
binPop.add(((GIOBGAIndividualIntegerPermutationData) partners.get(i)).getPermutations());
binPop.add((AbstractEAIndividual) ((GIOBGAIndividualIntegerPermutationData) partners.get(i)).getPermutations());
}
resBin = binTmp.mateWith(binPop);
@ -170,7 +170,7 @@ public class GIOBGAIndividualIntegerPermutationData extends AbstractEAIndividual
result = new AbstractEAIndividual[partners.size() + 1];
result[0] = (AbstractEAIndividual) this.clone();
for (int i = 0; i < partners.size(); i++) {
result[i + 1] = (AbstractEAIndividual) ((AbstractEAIndividual) partners.get(i)).clone();
result[i + 1] = (AbstractEAIndividual) (partners.get(i)).clone();
}
}
for (int i = 0; i < result.length; i++) {

View File

@ -67,7 +67,7 @@ public class SOBestMigration implements InterfaceMigration, java.io.Serializable
newIPOP[i].removeNIndividuals(comSet.length * this.n);
for (int j = 0; j < comSet.length; j++) {
selected = this.selection.selectFrom(comSet[j], this.n);
newIPOP[i].add(((AbstractEAIndividual) selected.get(0)).clone());
newIPOP[i].add((AbstractEAIndividual) (selected.get(0)).clone());
}
}

View File

@ -668,7 +668,7 @@ public class PostProcess {
prob.evaluate(subPop);
stepsPerf += subPop.size();
subPop.add(candidates.getEAIndividual(i).clone());
subPop.add((AbstractEAIndividual) candidates.getEAIndividual(i).clone());
nmPops.add(subPop);
}

View File

@ -57,11 +57,11 @@ public class SelectBestIndividuals implements InterfaceSelection, java.io.Serial
Population result = new Population();
int currentCriteria = 0, critSize;
critSize = ((AbstractEAIndividual) population.get(0)).getFitness().length;
critSize = (population.get(0)).getFitness().length;
ArrayList[] bestIndividuals = new ArrayList[critSize];
ArrayList<AbstractEAIndividual>[] bestIndividuals = new ArrayList[critSize];
for (int i = 0; i < critSize; i++) {
bestIndividuals[i] = new ArrayList();
bestIndividuals[i] = new ArrayList<>();
// select the best individuals regarding crit i
for (int j = 0; j < size; j++) {
bestIndividuals[i].add(this.getBestIndividualExcept(population, bestIndividuals[i], i));
@ -87,7 +87,7 @@ public class SelectBestIndividuals implements InterfaceSelection, java.io.Serial
* @param crit The criterion
* @return Object the individual
*/
private Object getBestIndividualExcept(Population pop, ArrayList tabu, int crit) {
private AbstractEAIndividual getBestIndividualExcept(Population pop, ArrayList tabu, int crit) {
int index = -1;
double bestProb = Double.POSITIVE_INFINITY;
boolean member;
@ -95,7 +95,7 @@ public class SelectBestIndividuals implements InterfaceSelection, java.io.Serial
if (this.obeyDebsConstViolationPrinciple) {
for (int i = 0; i < pop.size(); i++) {
indy = (AbstractEAIndividual) pop.get(i);
indy = pop.get(i);
// check if indy is tabu
member = false;
for (int j = 0; j < tabu.size(); j++) {
@ -115,7 +115,7 @@ public class SelectBestIndividuals implements InterfaceSelection, java.io.Serial
// darn all individuals seem to violate the constraints
// so lets select the guy with the least worst constraint violation
for (int i = 0; i < pop.size(); i++) {
indy = (AbstractEAIndividual) pop.get(i);
indy = pop.get(i);
// check if indy is tabu
member = false;
for (int j = 0; j < tabu.size(); j++) {
@ -137,7 +137,7 @@ public class SelectBestIndividuals implements InterfaceSelection, java.io.Serial
}
} else {
for (int i = 0; i < pop.size(); i++) {
indy = (AbstractEAIndividual) pop.get(i);
indy = pop.get(i);
// check if indy is tabu
member = false;
for (int j = 0; j < tabu.size(); j++) {

View File

@ -100,9 +100,9 @@ public class SelectEPTournaments implements InterfaceSelection, java.io.Serializ
Population result = new Population();
int currentCriteria = 0, critSize;
critSize = ((AbstractEAIndividual) population.get(0)).getFitness().length;
critSize = (population.get(0)).getFitness().length;
ArrayList[] bestIndividuals = new ArrayList[critSize];
ArrayList<AbstractEAIndividual>[] bestIndividuals = new ArrayList[critSize];
for (int i = 0; i < critSize; i++) {
bestIndividuals[i] = new ArrayList();
// select the best individuals regarding crit i
@ -130,14 +130,14 @@ public class SelectEPTournaments implements InterfaceSelection, java.io.Serializ
* @param crit The criterion
* @return Object the individual
*/
private Object getBestIndividualExcept(Population pop, ArrayList tabu, int crit) {
private AbstractEAIndividual getBestIndividualExcept(Population pop, ArrayList tabu, int crit) {
int index = -1;
int mostVictories = -1;
boolean member;
AbstractEAIndividual indy;
for (int i = 0; i < pop.size(); i++) {
indy = (AbstractEAIndividual) pop.get(i);
indy = pop.get(i);
// check if indy is tabu
member = false;
for (int j = 0; j < tabu.size(); j++) {

View File

@ -108,7 +108,7 @@ public class SelectParticleWheel implements InterfaceSelection, java.io.Serializ
selIndex++;
sum += ((AbstractEAIndividual) population.getIndividual(selIndex)).getSelectionProbability(0);
}
result.add(((AbstractEAIndividual) population.get(selIndex)).clone());
result.add((AbstractEAIndividual) (population.get(selIndex)).clone());
((AbstractEAIndividual) result.getIndividual(i)).setAge(0);
}
}
@ -126,7 +126,7 @@ public class SelectParticleWheel implements InterfaceSelection, java.io.Serializ
selIndex++;
selFitSum += ((AbstractEAIndividual) population.getIndividual(selIndex)).getSelectionProbability(0);
}
result.add(((AbstractEAIndividual) population.get(selIndex)).clone());
result.add((AbstractEAIndividual) (population.get(selIndex)).clone());
((AbstractEAIndividual) result.getIndividual(i)).setAge(0);
selPoint += segment;
}
@ -145,9 +145,6 @@ public class SelectParticleWheel implements InterfaceSelection, java.io.Serializ
return this.selectFrom(availablePartners, size);
}
/**********************************************************************************************************************
* These are for GUI
*/
/**
* This method allows the CommonJavaObjectEditorPanel to read the
* name to the current object.

View File

@ -94,7 +94,7 @@ public class PBILPopulation extends Population implements Cloneable, java.io.Ser
}
}
tmpIndy.setBGenotype(tmpBitSet);
super.add(tmpIndy);
super.add((AbstractEAIndividual) tmpIndy);
}
}

View File

@ -32,7 +32,7 @@ import java.util.logging.Logger;
* random latin hypercube implementation for InterfaceDataTypeDouble individuals.
*/
@Description("A population stores the individuals of a generation.")
public class Population extends ArrayList implements PopulationInterface, Cloneable, java.io.Serializable {
public class Population extends ArrayList<AbstractEAIndividual> implements PopulationInterface, Cloneable, java.io.Serializable {
private static final Logger LOGGER = Logger.getLogger(Population.class.getName());
@ -124,9 +124,9 @@ public class Population extends ArrayList implements PopulationInterface, Clonea
public Population(Population population) {
LOGGER.log(Level.FINER, "New population has been created.");
setSameParams(population);
for (Object individual : population) {
for (AbstractEAIndividual individual : population) {
if (individual != null) {
this.add((((AbstractEAIndividual) individual)).clone());
this.add((AbstractEAIndividual) individual.clone());
}
}
copyHistAndArchive(population);
@ -1418,7 +1418,7 @@ public class Population extends ArrayList implements PopulationInterface, Clonea
return this;
}
Population pop = new Population();
for (Object o : this) {
for (AbstractEAIndividual o : this) {
if (!exclude.contains(o)) {
pop.add(o);
}
@ -1684,8 +1684,8 @@ public class Population extends ArrayList implements PopulationInterface, Clonea
* seen as "structural change"?
*/
@Override
public Object set(int index, Object element) {
Object prev = super.set(index, element);
public AbstractEAIndividual set(int index, AbstractEAIndividual element) {
AbstractEAIndividual prev = super.set(index, element);
modCount++;
return prev;
}
@ -1695,14 +1695,14 @@ public class Population extends ArrayList implements PopulationInterface, Clonea
* the internally sorted array in synch to minimize complete resorting
* events.
*/
public Object set(int index, Object element, int fitIndex) {
Object prev = super.set(index, element);
public AbstractEAIndividual set(int index, AbstractEAIndividual element, int fitIndex) {
AbstractEAIndividual prev = super.set(index, element);
modCount++;
return prev;
}
public boolean addIndividual(IndividualInterface ind) {
super.add(ind);
super.add((AbstractEAIndividual) ind);
return true;
}
@ -1730,8 +1730,8 @@ public class Population extends ArrayList implements PopulationInterface, Clonea
* @param ind
* @return
*/
public IndividualInterface replaceIndividualAt(int index, IndividualInterface ind) {
return (IndividualInterface) set(index, ind);
public IndividualInterface replaceIndividualAt(int index, AbstractEAIndividual ind) {
return set(index, ind);
}
/**

View File

@ -300,7 +300,7 @@ public class BinaryScatterSearch extends AbstractOptimizer implements java.io.Se
}
dblIndy.setBinaryGenotype(data);
if (!contains(dblIndy, pop)) {
pop.add(dblIndy);
pop.add((AbstractEAIndividual) dblIndy);
evaluate(indy);
}
}
@ -328,7 +328,7 @@ public class BinaryScatterSearch extends AbstractOptimizer implements java.io.Se
}
dblIndy.setBinaryGenotype(data);
if (!contains(dblIndy, pop)) {
pop.add(dblIndy);
pop.add((AbstractEAIndividual) dblIndy);
evaluate(indy);
}
}

View File

@ -189,7 +189,7 @@ public class CHCAdaptiveSearchAlgorithm extends AbstractOptimizer implements jav
}
}
mutant.setBGenotype(tmpBitSet);
this.population.add(mutant);
this.population.add((AbstractEAIndividual) mutant);
}
if (best instanceof InterfaceGAIndividual) {
this.differenceThreshold = (int) (this.divergenceRate * (1 - this.divergenceRate) * ((InterfaceGAIndividual) best).getGenotypeLength());

View File

@ -416,7 +416,7 @@ public class EsDpiNiching extends AbstractOptimizer implements Serializable, Int
// if an association was found, there is a peak close to an archived solution, so reset it.
if (!archive.getEAIndividual(i).isDominating(peakPopSet[assoc[i]].getBestEAIndividual())) {
// the new found species is actually better than the archived solution
archive.set(i, peakPopSet[assoc[i]].getBestEAIndividual().clone()); // replace archived indy
archive.set(i, (AbstractEAIndividual) peakPopSet[assoc[i]].getBestEAIndividual().clone()); // replace archived indy
}
peakPopSet[assoc[i]] = initRandomPeakPop(getMuPerPeak());
}

View File

@ -102,7 +102,7 @@ public class MemeticAlgorithm implements InterfaceOptimizer, java.io.Serializabl
Population subset = selectorPlug.selectFrom(gop, subsetsize);
Population subsetclone = new Population();
for (int i = 0; i < subset.size(); i++) {
subsetclone.add(((AbstractEAIndividual) subset.get(i)).clone());
subsetclone.add((AbstractEAIndividual) (subset.get(i)).clone());
}
if (subset.size() != subsetsize) {
System.err.println("ALERT! identical individual instances in subset");
@ -110,8 +110,8 @@ public class MemeticAlgorithm implements InterfaceOptimizer, java.io.Serializabl
Hashtable antilamarckismcache = new Hashtable();
if (!this.lamarckism) {
for (int i = 0; i < subset.size(); i++) {
AbstractEAIndividual indy = (AbstractEAIndividual) subset.get(i);
AbstractEAIndividual indyclone = (AbstractEAIndividual) subsetclone
AbstractEAIndividual indy = subset.get(i);
AbstractEAIndividual indyclone = subsetclone
.get(i);
antilamarckismcache.put(indy, indyclone);
}
@ -140,7 +140,7 @@ public class MemeticAlgorithm implements InterfaceOptimizer, java.io.Serializabl
gop.addPopulation(subsetclone);
} else {
for (int i = 0; i < subset.size(); i++) {
AbstractEAIndividual indy = (AbstractEAIndividual) subset.get(i);
AbstractEAIndividual indy = subset.get(i);
try {
AbstractEAIndividual newindy = (AbstractEAIndividual) antilamarckismcache
.get(indy);

View File

@ -1477,7 +1477,7 @@ public class ParticleSwarmOptimization extends AbstractOptimizer implements java
@Override
public void setPopulation(Population pop) {
this.population = pop;
super.setPopulation(pop);
if (pop.size() > 0 && pop.size() != pop.getTargetSize()) { // new particle count!
tracedVelocity = null;
initializeByPopulation(null, false);

View File

@ -145,12 +145,12 @@ public abstract class AbstractMultiModalProblemKnown extends AbstractProblemDoub
* @param point
*/
protected void addOptimum(double[] point) {
InterfaceDataTypeDouble tmpIndy;
tmpIndy = (InterfaceDataTypeDouble) this.template.clone();
tmpIndy.setDoubleGenotype(point);
((AbstractEAIndividual) tmpIndy).setFitness(evalUnnormalized(point));
if (((AbstractEAIndividual) tmpIndy).getFitness(0) >= globalOptimum) {
globalOptimum = ((AbstractEAIndividual) tmpIndy).getFitness(0);
AbstractEAIndividual tmpIndy;
tmpIndy = (AbstractEAIndividual) template.clone();
((InterfaceDataTypeDouble) tmpIndy).setDoubleGenotype(point);
tmpIndy.setFitness(evalUnnormalized(point));
if ((tmpIndy).getFitness(0) >= globalOptimum) {
globalOptimum = (tmpIndy).getFitness(0);
if (makeGlobalOptUnreachable) {
double tmp = globalOptimum;
double dx = 1e-30;
@ -165,7 +165,7 @@ public abstract class AbstractMultiModalProblemKnown extends AbstractProblemDoub
}
if (isDoRotation()) {
point = inverseRotateMaybe(point); // theres an inverse rotation required
tmpIndy.setDoubleGenotype(point);
((InterfaceDataTypeDouble) tmpIndy).setDoubleGenotype(point);
}
this.listOfOptima.add(tmpIndy);
}
@ -244,7 +244,7 @@ public abstract class AbstractMultiModalProblemKnown extends AbstractProblemDoub
* <p/>
* This is in analogy to the original implementation by F.Streichert.
*
* @param mmProb
* @param realOpts
* @param pop
* @param epsilon
* @return

View File

@ -413,7 +413,7 @@ public abstract class AbstractProblemDouble extends AbstractOptimizationProblem
if (!Mathematics.isInRange(pos, prob.makeRange())) {
System.err.println("Warning, add optimum which is out of range!");
}
optimas.add(tmpIndy);
optimas.add((AbstractEAIndividual) tmpIndy);
}
/**
@ -431,7 +431,7 @@ public abstract class AbstractProblemDouble extends AbstractOptimizationProblem
.clone();
tmpIndy.setDoubleGenotype(pos);
((AbstractEAIndividual) tmpIndy).setFitness(prob.evaluate(pos));
pop.add(tmpIndy);
pop.add((AbstractEAIndividual) tmpIndy);
FitnessConvergenceTerminator convTerm = new FitnessConvergenceTerminator(
1e-25, 10, StagnationTypeEnum.generationBased,
ChangeTypeEnum.absoluteChange, DirectionTypeEnum.decrease);

View File

@ -149,8 +149,8 @@ class MyLensViewer extends JPanel implements InterfaceSolutionViewer {
newFrame.setVisible(true);
}
} else {
InterfaceDataTypeDouble best = (InterfaceDataTypeDouble) pop.getBestIndividual();
if (indiesToPaint.size() == 0 || ((AbstractEAIndividual) best).isDominant(indiesToPaint.getBestIndividual())) {
AbstractEAIndividual best = (AbstractEAIndividual) pop.getBestIndividual();
if (indiesToPaint.size() == 0 || (best).isDominant(indiesToPaint.getBestIndividual())) {
if (indiesToPaint.size() == 1) {
indiesToPaint.set(0, best);
} else {