Allowing plots for simple problems using default method plotBest(Plot, bestEAIndy).

This commit is contained in:
Marcel Kronfeld 2008-06-06 14:29:39 +00:00
parent 7316d1b955
commit 4bf02f5691

View File

@ -1,10 +1,15 @@
package eva2.server.go.problems; package eva2.server.go.problems;
import java.lang.reflect.Method;
import java.util.BitSet; import java.util.BitSet;
import simpleprobs.InterfaceSimpleProblem;
import simpleprobs.SimpleF1;
import simpleprobs.SimpleProblemBinary;
import simpleprobs.SimpleProblemDouble;
import wsi.ra.math.RNG;
import eva2.gui.BeanInspector; import eva2.gui.BeanInspector;
import eva2.gui.GenericObjectEditor; import eva2.gui.GenericObjectEditor;
import eva2.gui.Plot;
import eva2.server.go.individuals.AbstractEAIndividual; import eva2.server.go.individuals.AbstractEAIndividual;
import eva2.server.go.individuals.ESIndividualDoubleData; import eva2.server.go.individuals.ESIndividualDoubleData;
import eva2.server.go.individuals.GAIndividualBinaryData; import eva2.server.go.individuals.GAIndividualBinaryData;
@ -12,19 +17,16 @@ import eva2.server.go.individuals.InterfaceDataTypeBinary;
import eva2.server.go.individuals.InterfaceDataTypeDouble; import eva2.server.go.individuals.InterfaceDataTypeDouble;
import eva2.server.go.populations.Population; import eva2.server.go.populations.Population;
import eva2.server.go.strategies.InterfaceOptimizer; import eva2.server.go.strategies.InterfaceOptimizer;
import wsi.ra.math.RNG;
import simpleprobs.InterfaceSimpleProblem;
import simpleprobs.SimpleF1;
import simpleprobs.SimpleProblemBinary;
import simpleprobs.SimpleProblemDouble;
public class SimpleProblemWrapper extends AbstractOptimizationProblem { public class SimpleProblemWrapper extends AbstractOptimizationProblem {
InterfaceSimpleProblem simProb = new SimpleF1(); InterfaceSimpleProblem<?> simProb = new SimpleF1();
protected double m_DefaultRange = 10; protected double m_DefaultRange = 10;
protected double m_Noise = 0; protected double m_Noise = 0;
transient Plot m_plot;
String plotFunc = "plotBest";
public SimpleProblemWrapper() { public SimpleProblemWrapper() {
m_plot = null;
initTemplate(); initTemplate();
} }
@ -32,7 +34,7 @@ public class SimpleProblemWrapper extends AbstractOptimizationProblem {
other.m_DefaultRange = m_DefaultRange; other.m_DefaultRange = m_DefaultRange;
other.m_Noise = m_Noise; other.m_Noise = m_Noise;
// warning! this does no deep copy! // warning! this does no deep copy!
other.simProb = simProb; setSimpleProblem(other.simProb);
} }
@Override @Override
@ -68,6 +70,21 @@ public class SimpleProblemWrapper extends AbstractOptimizationProblem {
} }
} }
public void evaluatePopulationStart(Population population) {
if (m_plot != null && (!m_plot.isValid())) {
openPlot();
}
}
public void evaluatePopulationEnd(Population population) {
super.evaluatePopulationEnd(population);
if (m_plot != null) {
Object[] args = new Object[2];
args[0] = m_plot;
args[1] = population.getBestEAIndividual();
BeanInspector.callIfAvailable(simProb, plotFunc, args);
}
}
@Override @Override
public void initPopulation(Population population) { public void initPopulation(Population population) {
AbstractEAIndividual tmpIndy; AbstractEAIndividual tmpIndy;
@ -122,18 +139,34 @@ public class SimpleProblemWrapper extends AbstractOptimizationProblem {
/** /**
* @return the simProb * @return the simProb
*/ */
public InterfaceSimpleProblem getSimpleProblem() { public InterfaceSimpleProblem<?> getSimpleProblem() {
return simProb; return simProb;
} }
private void openPlot() {
m_plot = new Plot("SimpleProblemWrapper", "x", "y", true);
}
/** /**
* @param simProb the simProb to set * @param simProb the simProb to set
*/ */
public void setSimpleProblem(InterfaceSimpleProblem simProb) { public void setSimpleProblem(InterfaceSimpleProblem<?> simProb) {
this.simProb = simProb; this.simProb = simProb;
initTemplate(); initTemplate();
GenericObjectEditor.setShowProperty(getClass(), "noise", (simProb instanceof SimpleProblemDouble)); GenericObjectEditor.setShowProperty(getClass(), "noise", (simProb instanceof SimpleProblemDouble));
GenericObjectEditor.setShowProperty(getClass(), "defaultRange", (simProb instanceof SimpleProblemDouble)); GenericObjectEditor.setShowProperty(getClass(), "defaultRange", (simProb instanceof SimpleProblemDouble));
if (BeanInspector.hasMethod(simProb, plotFunc) != null) {
if (m_plot == null) openPlot();
else {
if (!m_plot.isValid()) {
m_plot.dispose();
openPlot();
} else m_plot.clearAll();
}
} else if (m_plot != null) {
m_plot.dispose();
m_plot = null;
}
} }
/** /**