IndividualMeanPlugin.java
package progen.output.plugins;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import progen.context.ProGenContext;
import progen.kernel.population.Individual;
/**
* Clase que representa los valores medios de un individuo.
*
* @author jirsis
* @since 2.0
*/
public class IndividualMeanPlugin implements Plugin {
private static final String DASH_DEPTH_LITERAL = "-depth";
private static final String DASH_NODES_LITERAL = "-nodes";
private static final String ADF_LITERAL = "ADF";
private static final String RPB_LITERAL = "RPB";
/** Valor medio del rawFitness./ */
private Mean raw;
/** Valor medio del adjustedFitness. */
private Mean adjusted;
/** Valores medios de todos los árboles que componen un individuo. */
private Map<String, Mean> trees;
/**
* Constructor por defecto de la clase.
*/
public IndividualMeanPlugin() {
raw = new Mean();
adjusted = new Mean();
trees = new HashMap<String, Mean>();
for (int i = 0; i < Integer.parseInt(ProGenContext.getMandatoryProperty("progen.total.RPB")); i++) {
trees.put(RPB_LITERAL + i + DASH_NODES_LITERAL, new Mean());
trees.put(RPB_LITERAL + i + DASH_DEPTH_LITERAL, new Mean());
}
for (int i = 0; i < ProGenContext.getOptionalProperty("progen.total.ADF", 0); i++) {
trees.put(ADF_LITERAL + i + DASH_NODES_LITERAL, new Mean());
trees.put(ADF_LITERAL + i + DASH_DEPTH_LITERAL, new Mean());
}
}
@Override
public void addValue(Comparable<?> value) {
if (!(value instanceof Individual)) {
throw new ClassCastException(value.toString());
}
final Individual individual = (Individual) value;
raw.addValue(individual.getRawFitness());
adjusted.addValue(individual.getAdjustedFitness());
for (int i = 0; i < individual.getTotalRPB(); i++) {
trees.get(RPB_LITERAL + i + DASH_NODES_LITERAL).addValue(individual.getTrees().get(RPB_LITERAL + i).getRoot().getTotalNodes());
trees.get(RPB_LITERAL + i + DASH_DEPTH_LITERAL).addValue(individual.getTrees().get(RPB_LITERAL + i).getRoot().getMaximunDepth());
}
for (int i = 0; i < individual.getTotalADF(); i++) {
trees.get(ADF_LITERAL + i + DASH_NODES_LITERAL).addValue(individual.getTrees().get(ADF_LITERAL + i).getRoot().getTotalNodes());
trees.get(ADF_LITERAL + i + DASH_DEPTH_LITERAL).addValue(individual.getTrees().get(ADF_LITERAL + i).getRoot().getMaximunDepth());
}
}
public void checkDependeces(List<Plugin> pluginCollection) {
// do nothing
}
public String getName() {
return "individualMean";
}
public Plugin getPlugin(String name) {
Plugin plugin;
if (name.compareTo(getName()) == 0) {
plugin = this;
} else {
plugin = new NullPlugin();
}
return plugin;
}
public int getPriority() {
return 0;
}
public Object getValue() {
final HashMap<String, Mean> value = new HashMap<String, Mean>();
value.putAll(trees);
value.put("raw", raw);
value.put("adjusted", adjusted);
return value;
}
public void initPlugin(String propertyFamily) {
// do nothing
}
public void initialValue() {
// do nothing
}
}