Clean up statistics code

fixes #20
- Move enums from .stat to .enums
- rename .stat package to .statistics
- make strings in StringSelectionEditor human readable
This commit is contained in:
Fabian Becker 2014-10-24 10:58:44 +02:00
parent 6694465ba1
commit cb5bedd263
48 changed files with 147 additions and 236 deletions

View File

@ -1,8 +1,8 @@
package eva2; package eva2;
import eva2.optimization.enums.DETypeEnum; import eva2.optimization.enums.DEType;
import eva2.optimization.enums.MutateESCrossoverTypeEnum; import eva2.optimization.enums.MutateESCrossoverType;
import eva2.optimization.enums.PSOTopologyEnum; import eva2.optimization.enums.PSOTopology;
import eva2.optimization.enums.PostProcessMethod; import eva2.optimization.enums.PostProcessMethod;
import eva2.optimization.go.InterfacePopulationChangedEventListener; import eva2.optimization.go.InterfacePopulationChangedEventListener;
import eva2.optimization.individuals.*; import eva2.optimization.individuals.*;
@ -28,7 +28,7 @@ import eva2.optimization.operator.terminators.InterfaceTerminator;
import eva2.optimization.population.PBILPopulation; import eva2.optimization.population.PBILPopulation;
import eva2.optimization.population.Population; import eva2.optimization.population.Population;
import eva2.problems.AbstractOptimizationProblem; import eva2.problems.AbstractOptimizationProblem;
import eva2.optimization.stat.InterfaceStatistics; import eva2.optimization.statistics.InterfaceStatistics;
import eva2.optimization.strategies.*; import eva2.optimization.strategies.*;
import eva2.tools.math.RNG; import eva2.tools.math.RNG;
@ -106,7 +106,7 @@ public class OptimizerFactory {
DifferentialEvolution de = new DifferentialEvolution(); DifferentialEvolution de = new DifferentialEvolution();
de.setProblem(problem); de.setProblem(problem);
de.getPopulation().setTargetSize(popsize); de.getPopulation().setTargetSize(popsize);
de.setDEType(DETypeEnum.DE2_CurrentToBest); de.setDEType(DEType.DE2_CurrentToBest);
de.setDifferentialWeight(f); de.setDifferentialWeight(f);
de.setCrossoverRate(CR); de.setCrossoverRate(CR);
de.setLambda(lambda); de.setLambda(lambda);
@ -416,7 +416,7 @@ public class OptimizerFactory {
*/ */
public static ParticleSwarmOptimization createParticleSwarmOptimization( public static ParticleSwarmOptimization createParticleSwarmOptimization(
AbstractOptimizationProblem problem, int popsize, double phi1, AbstractOptimizationProblem problem, int popsize, double phi1,
double phi2, double speedLim, PSOTopologyEnum selectedTopology, int topologyRange, double phi2, double speedLim, PSOTopology selectedTopology, int topologyRange,
InterfacePopulationChangedEventListener listener) { InterfacePopulationChangedEventListener listener) {
problem.initializeProblem(); problem.initializeProblem();
@ -1449,7 +1449,7 @@ public class OptimizerFactory {
public static OptimizationParameters standardDE( public static OptimizationParameters standardDE(
AbstractOptimizationProblem problem) { AbstractOptimizationProblem problem) {
DifferentialEvolution de = new DifferentialEvolution(); DifferentialEvolution de = new DifferentialEvolution();
de.setDEType(DETypeEnum.DE2_CurrentToBest); // this sets current-to-best de.setDEType(DEType.DE2_CurrentToBest); // this sets current-to-best
de.setDifferentialWeight(0.8); de.setDifferentialWeight(0.8);
de.setCrossoverRate(0.6); de.setCrossoverRate(0.6);
de.setLambda(0.6); de.setLambda(0.6);
@ -1465,7 +1465,7 @@ public class OptimizerFactory {
es.setPlusStrategy(false); es.setPlusStrategy(false);
if (assertIndyType(problem, InterfaceESIndividual.class)) { if (assertIndyType(problem, InterfaceESIndividual.class)) {
setTemplateOperators(problem, new MutateESGlobal(0.2, MutateESCrossoverTypeEnum.intermediate), 0.9, new CrossoverESDefault(), 0.2); setTemplateOperators(problem, new MutateESGlobal(0.2, MutateESCrossoverType.intermediate), 0.9, new CrossoverESDefault(), 0.2);
} else { } else {
System.err.println("Error, standard ES is implemented for ES individuals only (requires double data types)"); System.err.println("Error, standard ES is implemented for ES individuals only (requires double data types)");
return null; return null;
@ -1493,7 +1493,7 @@ public class OptimizerFactory {
AbstractOptimizationProblem problem) { AbstractOptimizationProblem problem) {
ParticleSwarmOptimization pso = new ParticleSwarmOptimization(); ParticleSwarmOptimization pso = new ParticleSwarmOptimization();
pso.setPhiValues(2.05, 2.05); pso.setPhiValues(2.05, 2.05);
pso.setTopology(PSOTopologyEnum.grid); pso.setTopology(PSOTopology.grid);
pso.setTopologyRange(1); pso.setTopologyRange(1);
return makeParams(pso, 30, problem, randSeed, getTerminator()); return makeParams(pso, 30, problem, randSeed, getTerminator());
} }
@ -1526,7 +1526,7 @@ public class OptimizerFactory {
EsDpiNiching nes = new EsDpiNiching(nicheRadius, muPerPeak, lambdaPerPeak, expectedPeaks, rndImmigrants, explorerPeaks, resetExplInterval, etaPresel); EsDpiNiching nes = new EsDpiNiching(nicheRadius, muPerPeak, lambdaPerPeak, expectedPeaks, rndImmigrants, explorerPeaks, resetExplInterval, etaPresel);
if (assertIndyType(prob, InterfaceESIndividual.class)) { if (assertIndyType(prob, InterfaceESIndividual.class)) {
setTemplateOperators(prob, new MutateESGlobal(0.2, MutateESCrossoverTypeEnum.intermediate), 0.9, new CrossoverESDefault(), 0.2); setTemplateOperators(prob, new MutateESGlobal(0.2, MutateESCrossoverType.intermediate), 0.9, new CrossoverESDefault(), 0.2);
} else { } else {
System.err.println("Error, standard ES is implemented for ES individuals only (requires double data types)"); System.err.println("Error, standard ES is implemented for ES individuals only (requires double data types)");
return null; return null;

View File

@ -6,14 +6,13 @@ import eva2.optimization.individuals.IndividualInterface;
import eva2.optimization.individuals.InterfaceDataTypeBinary; import eva2.optimization.individuals.InterfaceDataTypeBinary;
import eva2.optimization.individuals.InterfaceDataTypeDouble; import eva2.optimization.individuals.InterfaceDataTypeDouble;
import eva2.optimization.individuals.InterfaceDataTypeInteger; import eva2.optimization.individuals.InterfaceDataTypeInteger;
import eva2.optimization.modules.OptimizationParameters;
import eva2.optimization.modules.Processor; import eva2.optimization.modules.Processor;
import eva2.optimization.operator.postprocess.InterfacePostProcessParams; import eva2.optimization.operator.postprocess.InterfacePostProcessParams;
import eva2.optimization.operator.postprocess.PostProcessParams; import eva2.optimization.operator.postprocess.PostProcessParams;
import eva2.optimization.operator.terminators.InterfaceTerminator; import eva2.optimization.operator.terminators.InterfaceTerminator;
import eva2.optimization.population.Population; import eva2.optimization.population.Population;
import eva2.optimization.population.SolutionSet; import eva2.optimization.population.SolutionSet;
import eva2.optimization.stat.*; import eva2.optimization.statistics.*;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.StringWriter; import java.io.StringWriter;

View File

@ -3,8 +3,8 @@ package eva2.cli;
import com.google.gson.*; import com.google.gson.*;
import eva2.OptimizerFactory; import eva2.OptimizerFactory;
import eva2.optimization.OptimizationStateListener; import eva2.optimization.OptimizationStateListener;
import eva2.optimization.enums.DETypeEnum; import eva2.optimization.enums.DEType;
import eva2.optimization.enums.PSOTopologyEnum; import eva2.optimization.enums.PSOTopology;
import eva2.optimization.go.InterfacePopulationChangedEventListener; import eva2.optimization.go.InterfacePopulationChangedEventListener;
import eva2.optimization.modules.OptimizationParameters; import eva2.optimization.modules.OptimizationParameters;
import eva2.optimization.operator.crossover.CrossoverESDefault; import eva2.optimization.operator.crossover.CrossoverESDefault;
@ -461,7 +461,7 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
if (commandLine.hasOption("DEType")) { if (commandLine.hasOption("DEType")) {
((DifferentialEvolution)this.optimizer).setDEType( ((DifferentialEvolution)this.optimizer).setDEType(
DETypeEnum.getFromId( DEType.getFromId(
Integer.parseInt(commandLine.getOptionValue("DEType")) Integer.parseInt(commandLine.getOptionValue("DEType"))
) )
); );
@ -498,7 +498,7 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
case "ParticleSwarmOptimization": { case "ParticleSwarmOptimization": {
double phi1 = 2.05, phi2 = 2.05, speedLimit = 0.1; double phi1 = 2.05, phi2 = 2.05, speedLimit = 0.1;
int topoRange = 2; int topoRange = 2;
PSOTopologyEnum selectedTopology = PSOTopologyEnum.star; PSOTopology selectedTopology = PSOTopology.star;
opt.addOption("speedLimit", true, "Speed Limit"); opt.addOption("speedLimit", true, "Speed Limit");
opt.addOption("topology", true, "Particle Swarm Topology (0-7)"); opt.addOption("topology", true, "Particle Swarm Topology (0-7)");
@ -524,7 +524,7 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
} }
if (commandLine.hasOption("topology")) { if (commandLine.hasOption("topology")) {
selectedTopology = PSOTopologyEnum.getFromId(Integer.parseInt(commandLine.getOptionValue("topology"))); selectedTopology = PSOTopology.getFromId(Integer.parseInt(commandLine.getOptionValue("topology")));
} }
if (commandLine.hasOption("speedLimit")) { if (commandLine.hasOption("speedLimit")) {

View File

@ -2,7 +2,7 @@ package eva2.gui;
import eva2.optimization.OptimizationStateListener; import eva2.optimization.OptimizationStateListener;
import eva2.optimization.modules.ModuleAdapter; import eva2.optimization.modules.ModuleAdapter;
import eva2.optimization.stat.OptimizationJob; import eva2.optimization.statistics.OptimizationJob;
import eva2.tools.ToolBoxGui; import eva2.tools.ToolBoxGui;
import javax.swing.*; import javax.swing.*;

View File

@ -1,7 +1,7 @@
package eva2.gui; package eva2.gui;
import eva2.gui.editor.GenericObjectEditor; import eva2.gui.editor.GenericObjectEditor;
import eva2.optimization.stat.OptimizationJobList; import eva2.optimization.statistics.OptimizationJobList;
import javax.swing.*; import javax.swing.*;
import java.beans.PropertyEditor; import java.beans.PropertyEditor;

View File

@ -1,6 +1,6 @@
package eva2.gui; package eva2.gui;
import eva2.optimization.stat.InterfaceTextListener; import eva2.optimization.statistics.InterfaceTextListener;
/* /*
* *

View File

@ -6,9 +6,9 @@ import eva2.util.ClassPreloader;
import eva2.util.EvAComAdapter; import eva2.util.EvAComAdapter;
import eva2.optimization.OptimizationStateListener; import eva2.optimization.OptimizationStateListener;
import eva2.optimization.go.InterfaceOptimizationParameters; import eva2.optimization.go.InterfaceOptimizationParameters;
import eva2.optimization.stat.AbstractStatistics; import eva2.optimization.statistics.AbstractStatistics;
import eva2.optimization.stat.InterfaceStatisticsListener; import eva2.optimization.statistics.InterfaceStatisticsListener;
import eva2.optimization.stat.InterfaceStatisticsParameter; import eva2.optimization.statistics.InterfaceStatisticsParameter;
import eva2.tools.BasicResourceLoader; import eva2.tools.BasicResourceLoader;
import eva2.tools.EVAERROR; import eva2.tools.EVAERROR;
import eva2.tools.ReflectPackage; import eva2.tools.ReflectPackage;

View File

@ -4,11 +4,6 @@ import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport; import java.beans.PropertyChangeSupport;
/** /**
* Created by IntelliJ IDEA.
* User: streiche
* Date: 23.03.2004
* Time: 15:04:05
* To change this template use File | Settings | File Templates.
*/ */
public class PropertySelectableList<T> implements java.io.Serializable { public class PropertySelectableList<T> implements java.io.Serializable {
@ -16,9 +11,6 @@ public class PropertySelectableList<T> implements java.io.Serializable {
protected boolean[] selections; protected boolean[] selections;
private transient PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this); private transient PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
// public PropertySelectableList() {
// }
//
public PropertySelectableList(T[] initial) { public PropertySelectableList(T[] initial) {
objects = initial; objects = initial;
selections = new boolean[initial.length]; selections = new boolean[initial.length];

View File

@ -11,11 +11,6 @@ import java.beans.PropertyChangeSupport;
import java.beans.PropertyEditor; import java.beans.PropertyEditor;
/** /**
* Created by IntelliJ IDEA.
* User: streiche
* Date: 27.06.2003
* Time: 11:41:01
* To change this template use Options | File Templates.
*/ */
public abstract class AbstractListSelectionEditor extends JPanel implements PropertyEditor, PropertyChangeListener { public abstract class AbstractListSelectionEditor extends JPanel implements PropertyEditor, PropertyChangeListener {

View File

@ -4,7 +4,7 @@ package eva2.gui.editor;
*/ */
import eva2.gui.PropertySheetPanelStat; import eva2.gui.PropertySheetPanelStat;
import eva2.optimization.stat.GenericStatistics; import eva2.optimization.statistics.GenericStatistics;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;

View File

@ -1,6 +1,7 @@
package eva2.gui.editor; package eva2.gui.editor;
import eva2.tools.StringSelection; import eva2.tools.StringSelection;
import eva2.tools.StringTools;
public class StringSelectionEditor extends AbstractListSelectionEditor { public class StringSelectionEditor extends AbstractListSelectionEditor {
StringSelection strs; StringSelection strs;
@ -24,7 +25,7 @@ public class StringSelectionEditor extends AbstractListSelectionEditor {
@Override @Override
protected String getElementName(int i) { protected String getElementName(int i) {
return strs.getElement(i); return StringTools.humaniseCamelCase(strs.getElement(i));
} }
@Override @Override

View File

@ -1,6 +1,6 @@
package eva2.optimization.enums; package eva2.optimization.enums;
public enum DETypeEnum { public enum DEType {
DE1_Rand_1, DE2_CurrentToBest, DE_Best_1, DE_Best_2, TrigonometricDE, DE_CurrentToRand; DE1_Rand_1, DE2_CurrentToBest, DE_Best_1, DE_Best_2, TrigonometricDE, DE_CurrentToRand;
//", "DE2 - DE/current-to-best/1", "DE/best/2", "Trigonometric DE"}; //", "DE2 - DE/current-to-best/1", "DE/best/2", "Trigonometric DE"};
@ -10,7 +10,7 @@ public enum DETypeEnum {
* @param id * @param id
* @return * @return
*/ */
public static DETypeEnum getFromId(int id) { public static DEType getFromId(int id) {
switch (id) { switch (id) {
case 0: case 0:
return DE1_Rand_1; return DE1_Rand_1;
@ -25,7 +25,7 @@ public enum DETypeEnum {
case 5: case 5:
return DE_CurrentToRand; return DE_CurrentToRand;
default: default:
System.err.println("Error: invalid old DEType ID in DETypeEnum getFromId! Using DE_Best_1."); System.err.println("Error: invalid old DEType ID in DEType getFromId! Using DE_Best_1.");
return DE_Best_1; return DE_Best_1;
} }
} }

View File

@ -1,5 +1,5 @@
package eva2.optimization.enums; package eva2.optimization.enums;
public enum MutateESCrossoverTypeEnum { public enum MutateESCrossoverType {
none, intermediate, discrete none, intermediate, discrete
} }

View File

@ -1,6 +1,6 @@
package eva2.optimization.enums; package eva2.optimization.enums;
public enum PSOTopologyEnum { public enum PSOTopology {
/** /**
* *
*/ */
@ -37,7 +37,7 @@ public enum PSOTopologyEnum {
* @param oldID * @param oldID
* @return * @return
*/ */
public static PSOTopologyEnum getFromId(int oldID) { public static PSOTopology getFromId(int oldID) {
switch (oldID) { switch (oldID) {
case 0: case 0:
return linear; return linear;

View File

@ -1,6 +1,6 @@
package eva2.optimization.stat; package eva2.optimization.enums;
public enum StatsOnSingleDataSetEnum { public enum StatisticsOnSingleDataSet {
mean, median, variance, stdDev; mean, median, variance, stdDev;
public static String[] getInfoStrings() { public static String[] getInfoStrings() {

View File

@ -1,12 +1,14 @@
package eva2.optimization.stat; package eva2.optimization.enums;
public enum StatsOnTwoSampledDataEnum { public enum StatisticsOnTwoSampledData {
tTestEqLenEqVar, tTestUneqLenEqVar, tTestUneqLenUneqVar, mannWhitney; tTestEqLenEqVar, tTestUneqLenEqVar, tTestUneqLenUneqVar, mannWhitney;
public static String[] getInfoStrings() { public static String[] getInfoStrings() {
return new String[]{"Two-sampled t-Test with equal sized data sets", return new String[]{
"Two-sampled t-Test with equal sized data sets",
"Two-sampled t-Test with unequal sized data sets", "Two-sampled t-Test with unequal sized data sets",
"Two-sampled t-Test with unequal data sets and unequal variances", "Two-sampled t-Test with unequal data sets and unequal variances",
"Two-sampled Mann-Whitney test"}; "Two-sampled Mann-Whitney test"
};
} }
} }

View File

@ -1,7 +1,7 @@
package eva2.optimization.individuals; package eva2.optimization.individuals;
import eva2.optimization.enums.MutateESCrossoverTypeEnum; import eva2.optimization.enums.MutateESCrossoverType;
import eva2.optimization.operator.crossover.CrossoverESDefault; import eva2.optimization.operator.crossover.CrossoverESDefault;
import eva2.optimization.operator.mutation.InterfaceMutation; import eva2.optimization.operator.mutation.InterfaceMutation;
import eva2.optimization.operator.mutation.MutateESGlobal; import eva2.optimization.operator.mutation.MutateESGlobal;
@ -24,7 +24,7 @@ public class ESIndividualDoubleData extends AbstractEAIndividual implements Inte
public ESIndividualDoubleData() { public ESIndividualDoubleData() {
this.mutationProbability = 1.0; this.mutationProbability = 1.0;
this.mutationOperator = new MutateESGlobal(0.2, MutateESCrossoverTypeEnum.intermediate); this.mutationOperator = new MutateESGlobal(0.2, MutateESCrossoverType.intermediate);
this.crossoverProbability = 0.5; this.crossoverProbability = 0.5;
this.crossoverOperator = new CrossoverESDefault(); this.crossoverOperator = new CrossoverESDefault();
this.genotype = new double[1]; this.genotype = new double[1];

View File

@ -6,7 +6,7 @@ import eva2.gui.EvATabbedFrameMaker;
import eva2.gui.JParaPanel; import eva2.gui.JParaPanel;
import eva2.gui.editor.GenericObjectEditor; import eva2.gui.editor.GenericObjectEditor;
import eva2.optimization.go.InterfaceOptimizationParameters; import eva2.optimization.go.InterfaceOptimizationParameters;
import eva2.optimization.stat.*; import eva2.optimization.statistics.*;
import java.io.Serializable; import java.io.Serializable;

View File

@ -1,7 +1,7 @@
package eva2.optimization.modules; package eva2.optimization.modules;
import eva2.gui.EvATabbedFrameMaker; import eva2.gui.EvATabbedFrameMaker;
import eva2.optimization.OptimizationStateListener; import eva2.optimization.OptimizationStateListener;
import eva2.optimization.stat.OptimizationJob; import eva2.optimization.statistics.OptimizationJob;
/** /**
* *

View File

@ -15,12 +15,11 @@ import eva2.optimization.operator.terminators.InterfaceTerminator;
import eva2.optimization.population.Population; import eva2.optimization.population.Population;
import eva2.problems.AbstractOptimizationProblem; import eva2.problems.AbstractOptimizationProblem;
import eva2.problems.InterfaceAdditionalPopulationInformer; import eva2.problems.InterfaceAdditionalPopulationInformer;
import eva2.optimization.stat.InterfaceStatistics; import eva2.optimization.statistics.InterfaceStatistics;
import eva2.optimization.stat.InterfaceTextListener; import eva2.optimization.statistics.InterfaceTextListener;
import eva2.optimization.stat.StatisticsWithGUI; import eva2.optimization.statistics.StatisticsWithGUI;
import eva2.optimization.strategies.InterfaceOptimizer; import eva2.optimization.strategies.InterfaceOptimizer;
import eva2.tools.EVAERROR; import eva2.tools.EVAERROR;
import eva2.tools.EVAHELP;
import eva2.tools.StringTools; import eva2.tools.StringTools;
import eva2.tools.math.RNG; import eva2.tools.math.RNG;

View File

@ -1,6 +1,6 @@
package eva2.optimization.operator.mutation; package eva2.optimization.operator.mutation;
import eva2.optimization.enums.MutateESCrossoverTypeEnum; import eva2.optimization.enums.MutateESCrossoverType;
import eva2.optimization.individuals.AbstractEAIndividual; import eva2.optimization.individuals.AbstractEAIndividual;
import eva2.optimization.individuals.InterfaceESIndividual; import eva2.optimization.individuals.InterfaceESIndividual;
import eva2.optimization.population.Population; import eva2.optimization.population.Population;
@ -19,7 +19,7 @@ public class MutateESGlobal implements InterfaceMutation, java.io.Serializable,
protected double mutationStepSize = 0.2; protected double mutationStepSize = 0.2;
protected double tau1 = 0.15; protected double tau1 = 0.15;
protected double lowerLimitStepSize = 0.0000005; protected double lowerLimitStepSize = 0.0000005;
protected MutateESCrossoverTypeEnum crossoverType = MutateESCrossoverTypeEnum.none; protected MutateESCrossoverType crossoverType = MutateESCrossoverType.none;
public MutateESGlobal() { public MutateESGlobal() {
} }
@ -30,7 +30,7 @@ public class MutateESGlobal implements InterfaceMutation, java.io.Serializable,
* @param mutationStepSize * @param mutationStepSize
*/ */
public MutateESGlobal(double mutationStepSize) { public MutateESGlobal(double mutationStepSize) {
this(mutationStepSize, MutateESCrossoverTypeEnum.none); this(mutationStepSize, MutateESCrossoverType.none);
} }
/** /**
@ -38,7 +38,7 @@ public class MutateESGlobal implements InterfaceMutation, java.io.Serializable,
* *
* @param mutationStepSize * @param mutationStepSize
*/ */
public MutateESGlobal(double mutationStepSize, MutateESCrossoverTypeEnum coType) { public MutateESGlobal(double mutationStepSize, MutateESCrossoverType coType) {
setMutationStepSize(mutationStepSize); setMutationStepSize(mutationStepSize);
setCrossoverType(coType); setCrossoverType(coType);
} }
@ -133,7 +133,7 @@ public class MutateESGlobal implements InterfaceMutation, java.io.Serializable,
*/ */
@Override @Override
public void crossoverOnStrategyParameters(AbstractEAIndividual indy1, Population partners) { public void crossoverOnStrategyParameters(AbstractEAIndividual indy1, Population partners) {
if (crossoverType != MutateESCrossoverTypeEnum.none) { if (crossoverType != MutateESCrossoverType.none) {
ArrayList<Double> tmpList = new ArrayList<>(); ArrayList<Double> tmpList = new ArrayList<>();
if (indy1.getMutationOperator() instanceof MutateESGlobal) { if (indy1.getMutationOperator() instanceof MutateESGlobal) {
tmpList.add(new Double(((MutateESGlobal) indy1.getMutationOperator()).mutationStepSize)); tmpList.add(new Double(((MutateESGlobal) indy1.getMutationOperator()).mutationStepSize));
@ -266,11 +266,11 @@ public class MutateESGlobal implements InterfaceMutation, java.io.Serializable,
* *
* @param d The mutation operator. * @param d The mutation operator.
*/ */
public void setCrossoverType(MutateESCrossoverTypeEnum d) { public void setCrossoverType(MutateESCrossoverType d) {
this.crossoverType = d; this.crossoverType = d;
} }
public MutateESCrossoverTypeEnum getCrossoverType() { public MutateESCrossoverType getCrossoverType() {
return this.crossoverType; return this.crossoverType;
} }

View File

@ -24,8 +24,8 @@ import eva2.optimization.operator.terminators.EvaluationTerminator;
import eva2.optimization.operator.terminators.InterfaceTerminator; import eva2.optimization.operator.terminators.InterfaceTerminator;
import eva2.optimization.population.Population; import eva2.optimization.population.Population;
import eva2.problems.*; import eva2.problems.*;
import eva2.optimization.stat.InterfaceTextListener; import eva2.optimization.statistics.InterfaceTextListener;
import eva2.optimization.stat.StatisticsParameter; import eva2.optimization.statistics.StatisticsParameter;
import eva2.optimization.strategies.EvolutionStrategies; import eva2.optimization.strategies.EvolutionStrategies;
import eva2.optimization.strategies.GradientDescentAlgorithm; import eva2.optimization.strategies.GradientDescentAlgorithm;
import eva2.optimization.strategies.HillClimbing; import eva2.optimization.strategies.HillClimbing;

View File

@ -1,69 +0,0 @@
package eva2.optimization.stat;
/**
*
*/
public class MovingAverage {
private int size = 0;
private int index = 0;
private double average;
private double[] array;
private boolean overflow = false;
/**
*
*/
public MovingAverage(int size) {
this.size = size;
array = new double[size];
}
/**
*
*/
private MovingAverage(MovingAverage Source) {
size = Source.size;
index = Source.index;
average = Source.average;
array = Source.array.clone();
overflow = Source.overflow;
}
/**
*
*/
public MovingAverage getClone() {
return new MovingAverage(this);
}
/**
*
*/
public void add(double value) {
array[index] = value;
index++;
if (index == size) {
index = 0;
overflow = true;
}
//
average = 0;
int tail = index;
//if (overflow=true)
if (overflow) {
tail = size;
}
for (int i = 0; i < tail; i++) {
average += array[i];
}
average /= tail;
}
/**
*
*/
public double getAverage() {
return average;
}
}

View File

@ -1 +0,0 @@
package eva2.optimization.stat;

View File

@ -1,4 +1,4 @@
package eva2.optimization.stat; package eva2.optimization.statistics;
import eva2.gui.BeanInspector; import eva2.gui.BeanInspector;
import eva2.optimization.individuals.AbstractEAIndividual; import eva2.optimization.individuals.AbstractEAIndividual;

View File

@ -1,6 +1,8 @@
package eva2.optimization.stat; package eva2.optimization.statistics;
import eva2.gui.BeanInspector; import eva2.gui.BeanInspector;
import eva2.optimization.enums.StatisticsOnSingleDataSet;
import eva2.optimization.enums.StatisticsOnTwoSampledData;
import eva2.tools.ReflectPackage; import eva2.tools.ReflectPackage;
import eva2.tools.math.Mathematics; import eva2.tools.math.Mathematics;
@ -19,8 +21,8 @@ public class EvAStatisticalEvaluation {
public static void evaluate(InterfaceTextListener textout, OptimizationJob[] jobList, int[] selectedIndices, public static void evaluate(InterfaceTextListener textout, OptimizationJob[] jobList, int[] selectedIndices,
StatsOnSingleDataSetEnum[] singleStats, StatisticsOnSingleDataSet[] singleStats,
StatsOnTwoSampledDataEnum[] twoSampledStats) { StatisticsOnTwoSampledData[] twoSampledStats) {
ArrayList<OptimizationJob> jobsToWorkWith = new ArrayList<>(); ArrayList<OptimizationJob> jobsToWorkWith = new ArrayList<>();
for (int i = 0; i < jobList.length; i++) { for (int i = 0; i < jobList.length; i++) {
// remove jobs which are not finished or not selected // remove jobs which are not finished or not selected
@ -71,22 +73,22 @@ public class EvAStatisticalEvaluation {
for (int i = 0; i < twoSampledStats.length; i++) { for (int i = 0; i < twoSampledStats.length; i++) {
switch (twoSampledStats[i]) { switch (twoSampledStats[i]) {
case tTestEqLenEqVar: case tTestEqLenEqVar:
textout.println(StatsOnTwoSampledDataEnum.getInfoStrings()[twoSampledStats[i].ordinal()]); textout.println(StatisticsOnTwoSampledData.getInfoStrings()[twoSampledStats[i].ordinal()]);
writeTwoSampleFirstLine(textout, jobsToWorkWith); writeTwoSampleFirstLine(textout, jobsToWorkWith);
writeTTestEqSizeEqVar(textout, jobsToWorkWith, field); writeTTestEqSizeEqVar(textout, jobsToWorkWith, field);
break; break;
case tTestUneqLenEqVar: case tTestUneqLenEqVar:
textout.println(StatsOnTwoSampledDataEnum.getInfoStrings()[twoSampledStats[i].ordinal()]); textout.println(StatisticsOnTwoSampledData.getInfoStrings()[twoSampledStats[i].ordinal()]);
writeTwoSampleFirstLine(textout, jobsToWorkWith); writeTwoSampleFirstLine(textout, jobsToWorkWith);
writeUnEqSizeEqVar(textout, jobsToWorkWith, field); writeUnEqSizeEqVar(textout, jobsToWorkWith, field);
break; break;
case tTestUneqLenUneqVar: case tTestUneqLenUneqVar:
textout.println(StatsOnTwoSampledDataEnum.getInfoStrings()[twoSampledStats[i].ordinal()]); textout.println(StatisticsOnTwoSampledData.getInfoStrings()[twoSampledStats[i].ordinal()]);
writeTwoSampleFirstLine(textout, jobsToWorkWith); writeTwoSampleFirstLine(textout, jobsToWorkWith);
writeTTestUnEqSizeUnEqVar(textout, jobsToWorkWith, field); writeTTestUnEqSizeUnEqVar(textout, jobsToWorkWith, field);
break; break;
case mannWhitney: case mannWhitney:
textout.println(StatsOnTwoSampledDataEnum.getInfoStrings()[twoSampledStats[i].ordinal()]); textout.println(StatisticsOnTwoSampledData.getInfoStrings()[twoSampledStats[i].ordinal()]);
writeTwoSampleFirstLine(textout, jobsToWorkWith); writeTwoSampleFirstLine(textout, jobsToWorkWith);
writeMannWhitney(textout, jobsToWorkWith, field); writeMannWhitney(textout, jobsToWorkWith, field);
default: default:

View File

@ -1,5 +1,7 @@
package eva2.optimization.stat; package eva2.optimization.statistics;
import eva2.optimization.enums.StatisticsOnSingleDataSet;
import eva2.optimization.enums.StatisticsOnTwoSampledData;
import eva2.tools.StringSelection; import eva2.tools.StringSelection;
import javax.swing.*; import javax.swing.*;
@ -9,8 +11,8 @@ import java.util.List;
@eva2.util.annotation.Description(value = "Select statistical values to be calculated and tests to be performed.") @eva2.util.annotation.Description(value = "Select statistical values to be calculated and tests to be performed.")
public class EvAStatisticalEvaluationParams implements Serializable { public class EvAStatisticalEvaluationParams implements Serializable {
private StringSelection singleStats = new StringSelection(StatsOnSingleDataSetEnum.mean, StatsOnSingleDataSetEnum.getInfoStrings()); private StringSelection singleStats = new StringSelection(StatisticsOnSingleDataSet.mean, StatisticsOnSingleDataSet.getInfoStrings());
private StringSelection twoSampledStats = new StringSelection(StatsOnTwoSampledDataEnum.tTestUneqLenEqVar, StatsOnTwoSampledDataEnum.getInfoStrings()); private StringSelection twoSampledStats = new StringSelection(StatisticsOnTwoSampledData.tTestUneqLenEqVar, StatisticsOnTwoSampledData.getInfoStrings());
private List<JButton> additionalButtons = null; private List<JButton> additionalButtons = null;
public void setGenericAdditionalButtons(List<JButton> buts) { public void setGenericAdditionalButtons(List<JButton> buts) {

View File

@ -1,4 +1,4 @@
package eva2.optimization.stat; package eva2.optimization.statistics;
import eva2.gui.plot.DataViewer; import eva2.gui.plot.DataViewer;

View File

@ -1,4 +1,4 @@
package eva2.optimization.stat; package eva2.optimization.statistics;
import eva2.tools.StringSelection; import eva2.tools.StringSelection;

View File

@ -1,4 +1,4 @@
package eva2.optimization.stat; package eva2.optimization.statistics;
import eva2.optimization.individuals.IndividualInterface; import eva2.optimization.individuals.IndividualInterface;
import eva2.optimization.population.Population; import eva2.optimization.population.Population;

View File

@ -1,4 +1,4 @@
package eva2.optimization.stat; package eva2.optimization.statistics;
import java.util.List; import java.util.List;

View File

@ -1,4 +1,4 @@
package eva2.optimization.stat; package eva2.optimization.statistics;
import eva2.tools.SelectedTag; import eva2.tools.SelectedTag;
import eva2.tools.StringSelection; import eva2.tools.StringSelection;

View File

@ -1,4 +1,4 @@
package eva2.optimization.stat; package eva2.optimization.statistics;
/** /**
* A very simple interface class to receive raw String data. * A very simple interface class to receive raw String data.

View File

@ -1,4 +1,4 @@
package eva2.optimization.stat; package eva2.optimization.statistics;
import eva2.gui.BeanInspector; import eva2.gui.BeanInspector;
import eva2.optimization.go.InterfaceOptimizationParameters; import eva2.optimization.go.InterfaceOptimizationParameters;

View File

@ -1,8 +1,10 @@
package eva2.optimization.stat; package eva2.optimization.statistics;
import eva2.gui.JParaPanel; import eva2.gui.JParaPanel;
import eva2.gui.PropertySelectableList; import eva2.gui.PropertySelectableList;
import eva2.gui.editor.GenericArrayEditor; import eva2.gui.editor.GenericArrayEditor;
import eva2.optimization.enums.StatisticsOnSingleDataSet;
import eva2.optimization.enums.StatisticsOnTwoSampledData;
import eva2.optimization.go.InterfaceOptimizationParameters; import eva2.optimization.go.InterfaceOptimizationParameters;
import eva2.optimization.modules.AbstractModuleAdapter; import eva2.optimization.modules.AbstractModuleAdapter;
import eva2.optimization.modules.AbstractOptimizationParameters; import eva2.optimization.modules.AbstractOptimizationParameters;
@ -161,8 +163,8 @@ public class OptimizationJobList extends PropertySelectableList<OptimizationJob>
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
EvAStatisticalEvaluation.evaluate(jobList, jobList.getObjects(), genericArrayEditor.getSelectedIndices(), EvAStatisticalEvaluation.evaluate(jobList, jobList.getObjects(), genericArrayEditor.getSelectedIndices(),
(StatsOnSingleDataSetEnum[]) EvAStatisticalEvaluation.statsParams.getOneSampledStats().getSelectedEnum(StatsOnSingleDataSetEnum.values()), (StatisticsOnSingleDataSet[]) EvAStatisticalEvaluation.statsParams.getOneSampledStats().getSelectedEnum(StatisticsOnSingleDataSet.values()),
(StatsOnTwoSampledDataEnum[]) EvAStatisticalEvaluation.statsParams.getTwoSampledStats().getSelectedEnum(StatsOnTwoSampledDataEnum.values())); (StatisticsOnTwoSampledData[]) EvAStatisticalEvaluation.statsParams.getTwoSampledStats().getSelectedEnum(StatisticsOnTwoSampledData.values()));
} }
}; };
ActionListener sl = new ActionListener() { ActionListener sl = new ActionListener() {

View File

@ -1,4 +1,4 @@
package eva2.optimization.stat; package eva2.optimization.statistics;
import eva2.optimization.individuals.AbstractEAIndividual; import eva2.optimization.individuals.AbstractEAIndividual;
import eva2.optimization.individuals.IndividualInterface; import eva2.optimization.individuals.IndividualInterface;
@ -12,13 +12,11 @@ import java.util.List;
/** /**
* This may be given to a Processor if no further stats are required. It speeds up * This may be given to a Processor if no further stats are required. It speeds up
* optimization especially with small populations (e.g. HC as local search operator). * optimization especially with small populations (e.g. HC as local search operator).
*
* @author mkron
*/ */
public class StatisticsDummy implements InterfaceStatistics, InterfaceTextListener { public class StatisticsDummy implements InterfaceStatistics, InterfaceTextListener {
boolean consoleOut = false; private boolean consoleOut = false;
StatisticsParameter sParams = null; private StatisticsParameter sParams = null;
AbstractEAIndividual bestCurrentIndividual, bestRunIndy, bestIndividualAllover; private AbstractEAIndividual bestCurrentIndividual, bestRunIndy, bestIndividualAllover;
public StatisticsDummy() { public StatisticsDummy() {
bestIndividualAllover = null; bestIndividualAllover = null;

View File

@ -1,4 +1,4 @@
package eva2.optimization.stat; package eva2.optimization.statistics;
import eva2.gui.BeanInspector; import eva2.gui.BeanInspector;
import eva2.gui.editor.GenericObjectEditor; import eva2.gui.editor.GenericObjectEditor;
@ -42,8 +42,8 @@ public class StatisticsParameter implements InterfaceStatisticsParameter, Interf
public final static int OUTPUT_WINDOW = 1; public final static int OUTPUT_WINDOW = 1;
public final static int OUTPUT_FILE_WINDOW = 2; public final static int OUTPUT_FILE_WINDOW = 2;
SelectedTag outputTo = new SelectedTag("File (current dir.)", "Text-window", "Both file and text-window"); SelectedTag outputTo = new SelectedTag("File (current dir.)", "Text-window", "Both file and text-window");
private int verboK = 10; private int verbosityK = 10;
private int textoutput = 0; private int textOutput = 0;
private int multiRuns = 1; private int multiRuns = 1;
private String resultFilePrefix = "EvA2"; private String resultFilePrefix = "EvA2";
protected String name = "not defined"; protected String name = "not defined";
@ -98,7 +98,7 @@ public class StatisticsParameter implements InterfaceStatisticsParameter, Interf
@Override @Override
public String toString() { public String toString() {
String ret = "\r\nStatisticsParameter (" + super.toString() + "):\r\nmultiRuns=" + multiRuns String ret = "\r\nStatisticsParameter (" + super.toString() + "):\r\nmultiRuns=" + multiRuns
+ ", textoutput=" + textoutput + ", textOutput=" + textOutput
+ ", verbosity= " + outputVerbosity.getSelectedString() + ", verbosity= " + outputVerbosity.getSelectedString()
+ "\nTo " + outputTo.getSelectedString() + "\nTo " + outputTo.getSelectedString()
+ ", " + BeanInspector.toString(graphSel.getStrings()); + ", " + BeanInspector.toString(graphSel.getStrings());
@ -121,13 +121,13 @@ public class StatisticsParameter implements InterfaceStatisticsParameter, Interf
/** /**
* *
*/ */
private StatisticsParameter(StatisticsParameter Source) { private StatisticsParameter(StatisticsParameter statisticsParameter) {
convergenceRateThreshold = Source.convergenceRateThreshold; convergenceRateThreshold = statisticsParameter.convergenceRateThreshold;
useStatPlot = Source.useStatPlot; useStatPlot = statisticsParameter.useStatPlot;
textoutput = Source.textoutput; textOutput = statisticsParameter.textOutput;
multiRuns = Source.multiRuns; multiRuns = statisticsParameter.multiRuns;
resultFilePrefix = Source.resultFilePrefix; resultFilePrefix = statisticsParameter.resultFilePrefix;
verboK = Source.verboK; verbosityK = statisticsParameter.verbosityK;
} }
/** /**
@ -173,7 +173,7 @@ public class StatisticsParameter implements InterfaceStatisticsParameter, Interf
* *
*/ */
public String infoStringTipText() { public String infoStringTipText() {
return "Infostring displayed on fitness graph by prssing the right mouse button."; return "Infostring displayed on fitness graph by pressing the right mouse button.";
} }
/** /**
@ -232,12 +232,6 @@ public class StatisticsParameter implements InterfaceStatisticsParameter, Interf
return outputTo.getSelectedTagID() > 0; return outputTo.getSelectedTagID() > 0;
} }
// /**
// *
// */
// public String resultFileNameTipText() {
// return "File name for the result file. If empty or 'none', no output file will be created.";
// }
public String convergenceRateThresholdTipText() { public String convergenceRateThresholdTipText() {
return "Provided the optimal fitness is at zero, give the threshold below which it is considered as 'reached'"; return "Provided the optimal fitness is at zero, give the threshold below which it is considered as 'reached'";
} }
@ -298,12 +292,12 @@ public class StatisticsParameter implements InterfaceStatisticsParameter, Interf
@Override @Override
public int getOutputVerbosityK() { public int getOutputVerbosityK() {
return verboK; return verbosityK;
} }
@Override @Override
public void setOutputVerbosityK(int k) { public void setOutputVerbosityK(int k) {
verboK = k; verbosityK = k;
} }
public String outputVerbosityKTipText() { public String outputVerbosityKTipText() {
@ -371,16 +365,12 @@ public class StatisticsParameter implements InterfaceStatisticsParameter, Interf
infoFields.add(null); infoFields.add(null);
} }
} }
// header += inf.getAdditionalDataHeader(null); // lets hope this works with a null
} }
// create additional fields to be selectable by the user, defined by the informer headers // create additional fields to be selectable by the user, defined by the informer headers
// StringSelection ss = new StringSelection(GraphSelectionEnum.getAndAppendArray(headerFields.toArray(new String[headerFields.size()])));
StringSelection ss = new StringSelection(GraphSelectionEnum.currentBest, GraphSelectionEnum.getInfoStrings(), StringSelection ss = new StringSelection(GraphSelectionEnum.currentBest, GraphSelectionEnum.getInfoStrings(),
headerFields, infoFields.toArray(new String[infoFields.size()])); headerFields, infoFields.toArray(new String[infoFields.size()]));
ss.takeOverSelection(graphSel); ss.takeOverSelection(graphSel);
// System.out.println("In " + this + ": setting new informers: " + BeanInspector.toString(ss.getStrings()));
// This works! // This works!
setFieldSelection(ss); setFieldSelection(ss);
// System.out.println("After: " + this);
} }
} }

View File

@ -1,4 +1,4 @@
package eva2.optimization.stat; package eva2.optimization.statistics;
import eva2.optimization.population.PopulationInterface; import eva2.optimization.population.PopulationInterface;
import eva2.problems.InterfaceAdditionalPopulationInformer; import eva2.problems.InterfaceAdditionalPopulationInformer;
@ -80,7 +80,6 @@ public class StatisticsStandalone extends AbstractStatistics implements Interfac
double[] specificData = pop.getSpecificData(); double[] specificData = pop.getSpecificData();
if (specificData != null) { if (specificData != null) {
for (int i = 0; i < specificData.length; i++) { for (int i = 0; i < specificData.length; i++) {
// ((ArrayList<Object[]>[]) resultFrame.get(i))[optRunsPerformed].add(new Double[] {new Double(functionCalls), specificData[i]});
resultData.get(optRunsPerformed).add(new Object[]{new Double(functionCalls), specificData}); resultData.get(optRunsPerformed).add(new Object[]{new Double(functionCalls), specificData});
} }
} }

View File

@ -1,4 +1,4 @@
package eva2.optimization.stat; package eva2.optimization.statistics;
import eva2.gui.BeanInspector; import eva2.gui.BeanInspector;
import eva2.gui.JTextoutputFrame; import eva2.gui.JTextoutputFrame;

View File

@ -0,0 +1 @@
package eva2.optimization.statistics;

View File

@ -2,7 +2,7 @@ package eva2.optimization.strategies;
import eva2.OptimizerFactory; import eva2.OptimizerFactory;
import eva2.gui.editor.GenericObjectEditor; import eva2.gui.editor.GenericObjectEditor;
import eva2.optimization.enums.PSOTopologyEnum; import eva2.optimization.enums.PSOTopology;
import eva2.optimization.individuals.AbstractEAIndividual; import eva2.optimization.individuals.AbstractEAIndividual;
import eva2.optimization.individuals.InterfaceDataTypeDouble; import eva2.optimization.individuals.InterfaceDataTypeDouble;
import eva2.optimization.modules.OptimizationParameters; import eva2.optimization.modules.OptimizationParameters;
@ -126,7 +126,7 @@ public class ANPSO extends NichePSO implements InterfaceOptimizer, InterfaceAddi
// setMainSwarmInertness(new NoParameterAging(0.7298437881283576)); // setMainSwarmInertness(new NoParameterAging(0.7298437881283576));
setMainSwarmAlgoType(getMainSwarm().getAlgoType().setSelectedTag("Constriction")); // constriction setMainSwarmAlgoType(getMainSwarm().getAlgoType().setSelectedTag("Constriction")); // constriction
setMaxInitialSubSwarmSize(0); // deactivate early reinits setMaxInitialSubSwarmSize(0); // deactivate early reinits
setMainSwarmTopology(PSOTopologyEnum.grid); setMainSwarmTopology(PSOTopology.grid);
setMainSwarmTopologyRange(1); setMainSwarmTopologyRange(1);
setDeactivationStrategy(new StandardDeactivationStrategy(0.000001, 8)); setDeactivationStrategy(new StandardDeactivationStrategy(0.000001, 8));
setMainSwarmSize(100); setMainSwarmSize(100);
@ -154,7 +154,7 @@ public class ANPSO extends NichePSO implements InterfaceOptimizer, InterfaceAddi
initMainSwarm(); initMainSwarm();
}*/ }*/
public ANPSO(int mainSwarmSize, double phi1, double phi2, PSOTopologyEnum mainSwarmTopo, int mainSwarmTopoRange, int maxInitialSubSwarmSize) { public ANPSO(int mainSwarmSize, double phi1, double phi2, PSOTopology mainSwarmTopo, int mainSwarmTopoRange, int maxInitialSubSwarmSize) {
this(); this();
setMainSwarmSize(mainSwarmSize); setMainSwarmSize(mainSwarmSize);
getMainSwarm().setPhi1(phi1); getMainSwarm().setPhi1(phi1);
@ -177,7 +177,7 @@ public class ANPSO extends NichePSO implements InterfaceOptimizer, InterfaceAddi
GenericObjectEditor.setHideProperty(getClass(), "mergingStrategy", true); GenericObjectEditor.setHideProperty(getClass(), "mergingStrategy", true);
GenericObjectEditor.setHideProperty(getClass(), "absorptionStrategy", true); GenericObjectEditor.setHideProperty(getClass(), "absorptionStrategy", true);
GenericObjectEditor.setHideProperty(getClass(), "maxAllowedSwarmRadius", true); GenericObjectEditor.setHideProperty(getClass(), "maxAllowedSwarmRadius", true);
GenericObjectEditor.setHideProperty(getClass(), "mainSwarmTopologyRange", mainSwarmTopology == PSOTopologyEnum.multiSwarm); // "Multi-Swarm" has no topologyRange GenericObjectEditor.setHideProperty(getClass(), "mainSwarmTopologyRange", mainSwarmTopology == PSOTopology.multiSwarm); // "Multi-Swarm" has no topologyRange
// population size is set via setMainSwarmSize // population size is set via setMainSwarmSize
GenericObjectEditor.setHideProperty(getClass(), "population", true); GenericObjectEditor.setHideProperty(getClass(), "population", true);
@ -614,7 +614,7 @@ public class ANPSO extends NichePSO implements InterfaceOptimizer, InterfaceAddi
// createSubswarmIfPossible(); // createSubswarmIfPossible();
// adapt the species radius of the SPSO using similar population statistics as for the radius parameter r // adapt the species radius of the SPSO using similar population statistics as for the radius parameter r
if ((mainSwarm.getTopology() == PSOTopologyEnum.multiSwarm) && (mainSwarm.getMaxSubSwarmSize() > 1)) { //Multi-Swarm if ((mainSwarm.getTopology() == PSOTopology.multiSwarm) && (mainSwarm.getMaxSubSwarmSize() > 1)) { //Multi-Swarm
double aveDistToNeighInMain = getMainSwarm().getPopulation().getAvgDistToClosestNeighbor(true, false)[0]; double aveDistToNeighInMain = getMainSwarm().getPopulation().getAvgDistToClosestNeighbor(true, false)[0];
getMainSwarm().setSubSwarmRadius(aveDistToNeighInMain); getMainSwarm().setSubSwarmRadius(aveDistToNeighInMain);
} }
@ -907,7 +907,7 @@ public class ANPSO extends NichePSO implements InterfaceOptimizer, InterfaceAddi
anpso.getMainSwarm().setInertnessOrChi(0.7298437881283576); anpso.getMainSwarm().setInertnessOrChi(0.7298437881283576);
anpso.setMainSwarmAlgoType(anpso.getMainSwarm().getAlgoType().setSelectedTag("Constriction")); // constriction anpso.setMainSwarmAlgoType(anpso.getMainSwarm().getAlgoType().setSelectedTag("Constriction")); // constriction
anpso.setMaxInitialSubSwarmSize(0); // deactivate early reinits anpso.setMaxInitialSubSwarmSize(0); // deactivate early reinits
anpso.setMainSwarmTopology(PSOTopologyEnum.grid); anpso.setMainSwarmTopology(PSOTopology.grid);
anpso.setMainSwarmTopologyRange(1); anpso.setMainSwarmTopologyRange(1);
anpso.setDeactivationStrategy(new StandardDeactivationStrategy(0.000001, 8)); anpso.setDeactivationStrategy(new StandardDeactivationStrategy(0.000001, 8));

View File

@ -1,6 +1,6 @@
package eva2.optimization.strategies; package eva2.optimization.strategies;
import eva2.optimization.enums.PSOTopologyEnum; import eva2.optimization.enums.PSOTopology;
import eva2.optimization.operator.cluster.ClusteringDensityBased; import eva2.optimization.operator.cluster.ClusteringDensityBased;
import eva2.optimization.operator.distancemetric.IndividualDataMetric; import eva2.optimization.operator.distancemetric.IndividualDataMetric;
import eva2.optimization.operator.paramcontrol.CbpsoFitnessThresholdBasedAdaption; import eva2.optimization.operator.paramcontrol.CbpsoFitnessThresholdBasedAdaption;
@ -53,7 +53,7 @@ public class CBNPSO extends ClusterBasedNichingEA implements Serializable {
setEpsilonBound(epsilonConv); setEpsilonBound(epsilonConv);
setHaltingWindow(haltingWindow); setHaltingWindow(haltingWindow);
setMaxSpeciesSize(maxSpecSize); setMaxSpeciesSize(maxSpecSize);
setOptimizer(new ParticleSwarmOptimization(popSize, 2.05, 2.05, PSOTopologyEnum.grid, 2)); setOptimizer(new ParticleSwarmOptimization(popSize, 2.05, 2.05, PSOTopology.grid, 2));
ParamAdaption[] defAdpt = new ParamAdaption[]{getDefaultSinusoidalAdaption()}; ParamAdaption[] defAdpt = new ParamAdaption[]{getDefaultSinusoidalAdaption()};
setParameterControl(defAdpt); setParameterControl(defAdpt);
if (threshAdaption) { if (threshAdaption) {

View File

@ -2,7 +2,6 @@ package eva2.optimization.strategies;
import eva2.gui.BeanInspector; import eva2.gui.BeanInspector;
import eva2.gui.editor.GenericObjectEditor; import eva2.gui.editor.GenericObjectEditor;
import eva2.optimization.enums.DETypeEnum;
import eva2.optimization.go.InterfacePopulationChangedEventListener; import eva2.optimization.go.InterfacePopulationChangedEventListener;
import eva2.optimization.individuals.AbstractEAIndividual; import eva2.optimization.individuals.AbstractEAIndividual;
import eva2.optimization.individuals.InterfaceDataTypeDouble; import eva2.optimization.individuals.InterfaceDataTypeDouble;
@ -41,7 +40,7 @@ public class DifferentialEvolution implements InterfaceOptimizer, java.io.Serial
protected AbstractOptimizationProblem optimizationProblem = new F1Problem(); protected AbstractOptimizationProblem optimizationProblem = new F1Problem();
@Parameter(name = "DEType", description = "Mutation type for DE") @Parameter(name = "DEType", description = "Mutation type for DE")
private DETypeEnum DEType; private eva2.optimization.enums.DEType DEType;
@Parameter(name = "F", description = "Differential Weight") @Parameter(name = "F", description = "Differential Weight")
private double differentialWeight = 0.8; private double differentialWeight = 0.8;
@ -71,10 +70,10 @@ public class DifferentialEvolution implements InterfaceOptimizer, java.io.Serial
*/ */
public DifferentialEvolution() { public DifferentialEvolution() {
// sets DE2 as default // sets DE2 as default
DEType = DETypeEnum.DE2_CurrentToBest; DEType = eva2.optimization.enums.DEType.DE2_CurrentToBest;
} }
public DifferentialEvolution(int popSize, DETypeEnum type, double f, double cr, double lambda, double mt) { public DifferentialEvolution(int popSize, eva2.optimization.enums.DEType type, double f, double cr, double lambda, double mt) {
population = new Population(popSize); population = new Population(popSize);
DEType = type; DEType = type;
differentialWeight = f; differentialWeight = f;
@ -865,14 +864,14 @@ public class DifferentialEvolution implements InterfaceOptimizer, java.io.Serial
* *
* @param s The type. * @param s The type.
*/ */
public void setDEType(DETypeEnum s) { public void setDEType(eva2.optimization.enums.DEType s) {
this.DEType = s; this.DEType = s;
// show mt for trig. DE only // show mt for trig. DE only
GenericObjectEditor.setShowProperty(this.getClass(), "lambda", s == DETypeEnum.DE2_CurrentToBest); GenericObjectEditor.setShowProperty(this.getClass(), "lambda", s == eva2.optimization.enums.DEType.DE2_CurrentToBest);
GenericObjectEditor.setShowProperty(this.getClass(), "mt", s == DETypeEnum.TrigonometricDE); GenericObjectEditor.setShowProperty(this.getClass(), "mt", s == eva2.optimization.enums.DEType.TrigonometricDE);
} }
public DETypeEnum getDEType() { public eva2.optimization.enums.DEType getDEType() {
return this.DEType; return this.DEType;
} }

View File

@ -3,7 +3,7 @@ package eva2.optimization.strategies;
import eva2.OptimizerFactory; import eva2.OptimizerFactory;
import eva2.gui.editor.GenericObjectEditor; import eva2.gui.editor.GenericObjectEditor;
import eva2.gui.plot.TopoPlot; import eva2.gui.plot.TopoPlot;
import eva2.optimization.enums.PSOTopologyEnum; import eva2.optimization.enums.PSOTopology;
import eva2.optimization.go.InterfacePopulationChangedEventListener; import eva2.optimization.go.InterfacePopulationChangedEventListener;
import eva2.optimization.individuals.AbstractEAIndividual; import eva2.optimization.individuals.AbstractEAIndividual;
import eva2.optimization.individuals.InterfaceDataTypeDouble; import eva2.optimization.individuals.InterfaceDataTypeDouble;
@ -92,7 +92,7 @@ public class NichePSO implements InterfaceAdditionalPopulationInformer, Interfac
// Parameter for the mainswarm // Parameter for the mainswarm
// protected double mainSwarmPhi1 = 1.2; // protected double mainSwarmPhi1 = 1.2;
// protected double mainSwarmPhi2 = 0; // by default no communication in the mainswarm // protected double mainSwarmPhi2 = 0; // by default no communication in the mainswarm
protected PSOTopologyEnum mainSwarmTopology = PSOTopologyEnum.grid; // = 1; protected PSOTopology mainSwarmTopology = PSOTopology.grid; // = 1;
protected int mainSwarmTopologyRange = 0; protected int mainSwarmTopologyRange = 0;
private int mainSwarmAlgoType = 0; // 0: inertness, 1: constriction private int mainSwarmAlgoType = 0; // 0: inertness, 1: constriction
// private InterfaceParameterAging mainSwarmParamAging = new LinearParameterAging(); // private InterfaceParameterAging mainSwarmParamAging = new LinearParameterAging();
@ -1014,10 +1014,10 @@ public class NichePSO implements InterfaceAdditionalPopulationInformer, Interfac
// } // }
public void SetMainSwarmTopologyTag(int mainSwarmTopologyTag) { public void SetMainSwarmTopologyTag(int mainSwarmTopologyTag) {
// Possible topologies are: "Linear", "Grid", "Star", "Multi-Swarm", "Tree", "HPSO", "Random" in that order starting by 0. // Possible topologies are: "Linear", "Grid", "Star", "Multi-Swarm", "Tree", "HPSO", "Random" in that order starting by 0.
this.mainSwarmTopology = PSOTopologyEnum.getFromId(mainSwarmTopologyTag); this.mainSwarmTopology = PSOTopology.getFromId(mainSwarmTopologyTag);
} }
public PSOTopologyEnum getMainSwarmTopology() { public PSOTopology getMainSwarmTopology() {
return mainSwarm.topology; return mainSwarm.topology;
} }
@ -1026,10 +1026,10 @@ public class NichePSO implements InterfaceAdditionalPopulationInformer, Interfac
* *
* @param t The type. * @param t The type.
*/ */
public void setMainSwarmTopology(PSOTopologyEnum t) { public void setMainSwarmTopology(PSOTopology t) {
mainSwarm.topology = t; mainSwarm.topology = t;
this.mainSwarmTopology = t; this.mainSwarmTopology = t;
GenericObjectEditor.setHideProperty(getClass(), "mainSwarmTopologyRange", mainSwarmTopology == PSOTopologyEnum.multiSwarm); // "Multi-Swarm" has no topologyRange GenericObjectEditor.setHideProperty(getClass(), "mainSwarmTopologyRange", mainSwarmTopology == PSOTopology.multiSwarm); // "Multi-Swarm" has no topologyRange
} }
public int getMainSwarmTopologyRange() { public int getMainSwarmTopologyRange() {

View File

@ -4,7 +4,7 @@ import eva2.gui.BeanInspector;
import eva2.gui.editor.GenericObjectEditor; import eva2.gui.editor.GenericObjectEditor;
import eva2.gui.plot.Plot; import eva2.gui.plot.Plot;
import eva2.gui.plot.TopoPlot; import eva2.gui.plot.TopoPlot;
import eva2.optimization.enums.PSOTopologyEnum; import eva2.optimization.enums.PSOTopology;
import eva2.optimization.go.InterfacePopulationChangedEventListener; import eva2.optimization.go.InterfacePopulationChangedEventListener;
import eva2.optimization.individuals.AbstractEAIndividual; import eva2.optimization.individuals.AbstractEAIndividual;
import eva2.optimization.individuals.AbstractEAIndividualComparator; import eva2.optimization.individuals.AbstractEAIndividualComparator;
@ -53,7 +53,7 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
protected boolean checkRange = true; protected boolean checkRange = true;
protected boolean checkSpeedLimit = false; protected boolean checkSpeedLimit = false;
protected boolean useAlternative = false; protected boolean useAlternative = false;
protected PSOTopologyEnum topology = PSOTopologyEnum.grid; protected PSOTopology topology = PSOTopology.grid;
/** /**
* Defines which version of PSO is applied, classical inertness or * Defines which version of PSO is applied, classical inertness or
* constriction (using chi) * constriction (using chi)
@ -110,7 +110,7 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
// private double lsCandidateRatio=0.25; // private double lsCandidateRatio=0.25;
public ParticleSwarmOptimization() { public ParticleSwarmOptimization() {
topology = PSOTopologyEnum.grid; topology = PSOTopology.grid;
algType = new SelectedTag("Inertness", "Constriction"); algType = new SelectedTag("Inertness", "Constriction");
algType.setSelectedTag(1); algType.setSelectedTag(1);
@ -145,7 +145,7 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
* @param topo type of the neighbourhood topology * @param topo type of the neighbourhood topology
* @param topoRange range of the neighbourhood topology * @param topoRange range of the neighbourhood topology
*/ */
public ParticleSwarmOptimization(int popSize, double p1, double p2, PSOTopologyEnum topo, int topoRange) { public ParticleSwarmOptimization(int popSize, double p1, double p2, PSOTopology topo, int topoRange) {
this(); this();
algType.setSelectedTag(1); // set to constriction algType.setSelectedTag(1); // set to constriction
population = new Population(popSize); population = new Population(popSize);
@ -454,7 +454,7 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
treeLevels = 0; treeLevels = 0;
// the HPSO tree will contain layers 0...HPSOLevels, the last one is "incomplete" with only HPSOOrphans number of nodes // the HPSO tree will contain layers 0...HPSOLevels, the last one is "incomplete" with only HPSOOrphans number of nodes
if (getTopology() == PSOTopologyEnum.hpso || getTopology() == PSOTopologyEnum.tree) { if (getTopology() == PSOTopology.hpso || getTopology() == PSOTopology.tree) {
if (topologyRange < 2) { if (topologyRange < 2) {
System.err.println("Error, tree/hpso requires topology range of at least 2!"); System.err.println("Error, tree/hpso requires topology range of at least 2!");
} else { } else {
@ -465,7 +465,7 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
treeLastFullLevelNodeCnt = (int) Math.pow(topologyRange, treeLevels - 1); treeLastFullLevelNodeCnt = (int) Math.pow(topologyRange, treeLevels - 1);
} }
} }
if (getTopology() == PSOTopologyEnum.dms) { if (getTopology() == PSOTopology.dms) {
dmsLinks = regroupSwarm(population, getTopologyRange()); dmsLinks = regroupSwarm(population, getTopologyRange());
} }
} }
@ -1310,21 +1310,21 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
} }
protected void updateTopology(Population pop) { protected void updateTopology(Population pop) {
if (topology == PSOTopologyEnum.dms) { // Dynamic multi-swarm after Liang & Suganthan if (topology == PSOTopology.dms) { // Dynamic multi-swarm after Liang & Suganthan
if (pop.getGeneration() % getDmsRegroupGens() == 0) { if (pop.getGeneration() % getDmsRegroupGens() == 0) {
dmsLinks = regroupSwarm(pop, getTopologyRange()); dmsLinks = regroupSwarm(pop, getTopologyRange());
} }
} }
if ((topology == PSOTopologyEnum.multiSwarm) || (topology == PSOTopologyEnum.tree)) { if ((topology == PSOTopology.multiSwarm) || (topology == PSOTopology.tree)) {
sortedPop = pop.toArray(); sortedPop = pop.toArray();
if ((topology == PSOTopologyEnum.multiSwarm) || (treeStruct >= 2)) { if ((topology == PSOTopology.multiSwarm) || (treeStruct >= 2)) {
Arrays.sort(sortedPop, new AbstractEAIndividualComparator()); Arrays.sort(sortedPop, new AbstractEAIndividualComparator());
} else { } else {
Arrays.sort(sortedPop, new AbstractEAIndividualComparator(partBestFitKey)); Arrays.sort(sortedPop, new AbstractEAIndividualComparator(partBestFitKey));
} }
addSortedIndicesTo(sortedPop, pop); addSortedIndicesTo(sortedPop, pop);
} }
if (topology == PSOTopologyEnum.multiSwarm) { if (topology == PSOTopology.multiSwarm) {
// prepare multi swarm topology // prepare multi swarm topology
PhenotypeMetric metric = new PhenotypeMetric(); PhenotypeMetric metric = new PhenotypeMetric();
Vector<AbstractEAIndividual> leaders = new Vector<>(pop.size()); Vector<AbstractEAIndividual> leaders = new Vector<>(pop.size());
@ -1378,7 +1378,7 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
// } // }
//System.out.println(" -- best " + population.indexOf(population.getBestEAIndividual())); //System.out.println(" -- best " + population.indexOf(population.getBestEAIndividual()));
} }
if (topology == PSOTopologyEnum.hpso) { // HPSO sorting the population if (topology == PSOTopology.hpso) { // HPSO sorting the population
int parentIndex; int parentIndex;
AbstractEAIndividual indy; AbstractEAIndividual indy;
AbstractEAIndividualComparator comp = new AbstractEAIndividualComparator(partBestFitKey); AbstractEAIndividualComparator comp = new AbstractEAIndividualComparator(partBestFitKey);
@ -1756,7 +1756,7 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
* *
* @param s The type. * @param s The type.
*/ */
public void setTopology(PSOTopologyEnum t) { public void setTopology(PSOTopology t) {
this.topology = t; this.topology = t;
setGOEShowProperties(getClass()); setGOEShowProperties(getClass());
} }
@ -1764,22 +1764,22 @@ public class ParticleSwarmOptimization implements InterfaceOptimizer, java.io.Se
public void setGOEShowProperties(Class<?> cls) { public void setGOEShowProperties(Class<?> cls) {
// linear, grid, random // linear, grid, random
GenericObjectEditor.setShowProperty(cls, "topologyRange", (topology == PSOTopologyEnum.linear) || (topology == PSOTopologyEnum.grid) || (topology == PSOTopologyEnum.random) || (topology == PSOTopologyEnum.tree) || (topology == PSOTopologyEnum.hpso) || (topology == PSOTopologyEnum.dms)); GenericObjectEditor.setShowProperty(cls, "topologyRange", (topology == PSOTopology.linear) || (topology == PSOTopology.grid) || (topology == PSOTopology.random) || (topology == PSOTopology.tree) || (topology == PSOTopology.hpso) || (topology == PSOTopology.dms));
// multi swarm // multi swarm
GenericObjectEditor.setShowProperty(cls, "subSwarmRadius", (topology == PSOTopologyEnum.multiSwarm)); GenericObjectEditor.setShowProperty(cls, "subSwarmRadius", (topology == PSOTopology.multiSwarm));
// multi swarm // multi swarm
GenericObjectEditor.setShowProperty(cls, "maxSubSwarmSize", (topology == PSOTopologyEnum.multiSwarm)); GenericObjectEditor.setShowProperty(cls, "maxSubSwarmSize", (topology == PSOTopology.multiSwarm));
// tree // tree
GenericObjectEditor.setShowProperty(cls, "treeStruct", (topology == PSOTopologyEnum.tree)); GenericObjectEditor.setShowProperty(cls, "treeStruct", (topology == PSOTopology.tree));
// tree, hpso // tree, hpso
// GenericObjectEditor.setShowProperty(cls, "treeBranchDegree", (topology==PSOTopologyEnum.tree) || (topology==PSOTopologyEnum.hpso)); // GenericObjectEditor.setShowProperty(cls, "treeBranchDegree", (topology==PSOTopologyEnum.tree) || (topology==PSOTopologyEnum.hpso));
// linear // linear
GenericObjectEditor.setShowProperty(cls, "wrapTopology", (topology == PSOTopologyEnum.linear) || (topology == PSOTopologyEnum.grid)); GenericObjectEditor.setShowProperty(cls, "wrapTopology", (topology == PSOTopology.linear) || (topology == PSOTopology.grid));
// dms // dms
GenericObjectEditor.setShowProperty(cls, "dmsRegroupGens", (topology == PSOTopologyEnum.dms)); GenericObjectEditor.setShowProperty(cls, "dmsRegroupGens", (topology == PSOTopology.dms));
} }
public PSOTopologyEnum getTopology() { public PSOTopology getTopology() {
return topology; return topology;
} }

View File

@ -1,6 +1,6 @@
package eva2.optimization.strategies; package eva2.optimization.strategies;
import eva2.optimization.enums.PSOTopologyEnum; import eva2.optimization.enums.PSOTopology;
import eva2.optimization.operator.cluster.ClusteringDensityBased; import eva2.optimization.operator.cluster.ClusteringDensityBased;
import eva2.optimization.operator.distancemetric.IndividualDataMetric; import eva2.optimization.operator.distancemetric.IndividualDataMetric;
import eva2.optimization.operator.paramcontrol.ParamAdaption; import eva2.optimization.operator.paramcontrol.ParamAdaption;
@ -27,7 +27,7 @@ public class SqPSO extends ClusterBasedNichingEA {
setEpsilonBound(epsilonConv); setEpsilonBound(epsilonConv);
setHaltingWindow(haltingWindow); setHaltingWindow(haltingWindow);
setMaxSpeciesSize(popSize); setMaxSpeciesSize(popSize);
setOptimizer(new ParticleSwarmOptimization(popSize, 2.05, 2.05, PSOTopologyEnum.grid, 2)); setOptimizer(new ParticleSwarmOptimization(popSize, 2.05, 2.05, PSOTopology.grid, 2));
ParamAdaption[] defAdpt = new ParamAdaption[]{}; ParamAdaption[] defAdpt = new ParamAdaption[]{};
setParameterControl(defAdpt); setParameterControl(defAdpt);
setPopulationSize(popSize); setPopulationSize(popSize);

View File

@ -14,7 +14,7 @@ import eva2.optimization.operator.selection.SelectBestIndividuals;
import eva2.optimization.operator.terminators.EvaluationTerminator; import eva2.optimization.operator.terminators.EvaluationTerminator;
import eva2.optimization.population.InterfaceSolutionSet; import eva2.optimization.population.InterfaceSolutionSet;
import eva2.optimization.population.Population; import eva2.optimization.population.Population;
import eva2.optimization.stat.StatisticsStandalone; import eva2.optimization.statistics.StatisticsStandalone;
import eva2.optimization.strategies.GeneticAlgorithm; import eva2.optimization.strategies.GeneticAlgorithm;
import eva2.optimization.strategies.InterfaceOptimizer; import eva2.optimization.strategies.InterfaceOptimizer;
import eva2.tools.BasicResourceLoader; import eva2.tools.BasicResourceLoader;

View File

@ -13,7 +13,7 @@ import eva2.optimization.operator.terminators.PopulationMeasureTerminator.Change
import eva2.optimization.operator.terminators.PopulationMeasureTerminator.DirectionTypeEnum; import eva2.optimization.operator.terminators.PopulationMeasureTerminator.DirectionTypeEnum;
import eva2.optimization.operator.terminators.PopulationMeasureTerminator.StagnationTypeEnum; import eva2.optimization.operator.terminators.PopulationMeasureTerminator.StagnationTypeEnum;
import eva2.optimization.population.Population; import eva2.optimization.population.Population;
import eva2.optimization.stat.InterfaceTextListener; import eva2.optimization.statistics.InterfaceTextListener;
import eva2.optimization.strategies.InterfaceOptimizer; import eva2.optimization.strategies.InterfaceOptimizer;
import eva2.util.annotation.Description; import eva2.util.annotation.Description;