Add scout count info as additional data for output.

This commit is contained in:
Fabian Becker 2014-12-01 12:23:12 +00:00
parent d80ac15142
commit b75da91ead

View File

@ -4,7 +4,9 @@ import eva2.optimization.individuals.AbstractEAIndividual;
import eva2.optimization.individuals.InterfaceDataTypeDouble; import eva2.optimization.individuals.InterfaceDataTypeDouble;
import eva2.optimization.population.InterfaceSolutionSet; import eva2.optimization.population.InterfaceSolutionSet;
import eva2.optimization.population.Population; import eva2.optimization.population.Population;
import eva2.optimization.population.PopulationInterface;
import eva2.optimization.population.SolutionSet; import eva2.optimization.population.SolutionSet;
import eva2.problems.InterfaceAdditionalPopulationInformer;
import eva2.tools.math.Mathematics; import eva2.tools.math.Mathematics;
import eva2.tools.math.RNG; import eva2.tools.math.RNG;
import eva2.util.annotation.Description; import eva2.util.annotation.Description;
@ -19,7 +21,7 @@ import java.util.logging.Logger;
* This optimizer implements the original ABC algorithm proposed by Karaboga et.al. * This optimizer implements the original ABC algorithm proposed by Karaboga et.al.
*/ */
@Description("Artificial Bee Colony") @Description("Artificial Bee Colony")
public class ArtificialBeeColony extends AbstractOptimizer implements Serializable { public class ArtificialBeeColony extends AbstractOptimizer implements InterfaceAdditionalPopulationInformer, Serializable {
private static final Logger LOGGER = Logger.getLogger(ArtificialBeeColony.class.getName()); private static final Logger LOGGER = Logger.getLogger(ArtificialBeeColony.class.getName());
/** /**
@ -27,6 +29,8 @@ public class ArtificialBeeColony extends AbstractOptimizer implements Serializab
*/ */
protected int maxTrials = 100; protected int maxTrials = 100;
protected int scoutCount = 0;
protected AbstractEAIndividual bestIndividual; protected AbstractEAIndividual bestIndividual;
@ -51,6 +55,7 @@ public class ArtificialBeeColony extends AbstractOptimizer implements Serializab
@Override @Override
public void initialize() { public void initialize() {
this.scoutCount = 0;
this.optimizationProblem.initializePopulation(this.population); this.optimizationProblem.initializePopulation(this.population);
this.evaluatePopulation(this.population); this.evaluatePopulation(this.population);
this.firePropertyChangedEvent(Population.NEXT_GENERATION_PERFORMED); this.firePropertyChangedEvent(Population.NEXT_GENERATION_PERFORMED);
@ -136,6 +141,7 @@ public class ArtificialBeeColony extends AbstractOptimizer implements Serializab
AbstractEAIndividual oldestIndy = getOldestIndividual(); AbstractEAIndividual oldestIndy = getOldestIndividual();
if (oldestIndy.getAge() > this.maxTrials) { if (oldestIndy.getAge() > this.maxTrials) {
LOGGER.finer("Scout bee generated."); LOGGER.finer("Scout bee generated.");
this.scoutCount++;
oldestIndy.initialize(this.optimizationProblem); oldestIndy.initialize(this.optimizationProblem);
this.optimizationProblem.evaluate(oldestIndy); this.optimizationProblem.evaluate(oldestIndy);
this.population.incrFunctionCalls(); this.population.incrFunctionCalls();
@ -267,4 +273,19 @@ public class ArtificialBeeColony extends AbstractOptimizer implements Serializab
public int getMaxTrials() { public int getMaxTrials() {
return maxTrials; return maxTrials;
} }
@Override
public String[] getAdditionalDataHeader() {
return new String[]{"scoutCount"};
}
@Override
public String[] getAdditionalDataInfo() {
return new String[]{"Number of re-initialized Bees (Scouts)"};
}
@Override
public Object[] getAdditionalDataValue(PopulationInterface pop) {
return new Object[]{scoutCount};
}
} }