diff --git a/src/eva2/gui/FunctionArea.java b/src/eva2/gui/FunctionArea.java index db26bd87..0d086cd9 100644 --- a/src/eva2/gui/FunctionArea.java +++ b/src/eva2/gui/FunctionArea.java @@ -131,11 +131,43 @@ public class FunctionArea extends DArea implements Serializable { * @param graphID */ public void drawCircle(String label, double[] position, int graphID) { + drawIcon(new Chart2DDPointIconCircle(), label, position, graphID); + } + + /** + * Plot an icon to the function area which is annotated with a char and + * a double value. The color corresponds to the color of the graph with given ID + * Icon types are 0: circle, 1: cross, otherwise: point. + * + * @param label + * @param position + * @param graphID + */ + public void drawIcon(int iconType, String label, double[] position, int graphID) { + DPointIcon theIcon; + switch (iconType) { + case 0: theIcon = new Chart2DDPointIconCircle(); break; + case 1: theIcon = new Chart2DDPointIconCross(); break; + default: + case 2: theIcon = new Chart2DDPointIconPoint(); break; + } + drawIcon(theIcon, label, position, graphID); + } + + /** + * Plot a circle icon to the function area which is annotated with a char and + * a double value. The color corresponds to the color of the graph with given ID + * + * @param label + * @param position + * @param graphID + */ + public void drawIcon(DPointIcon theIcon, String label, double[] position, int graphID) { DPointSet popRep; popRep = new DPointSet(); popRep.addDPoint(new DPoint(position[0], position[1])); DPointIcon icon = new Chart2DDPointIconText(label); - ((Chart2DDPointIconText)icon).setIcon(new Chart2DDPointIconCircle()); + ((Chart2DDPointIconText)icon).setIcon(theIcon); ((Chart2DDPointIconText)icon).setColor(getGraphPointSet(graphID).getColor()); popRep.setIcon(icon); addDElement(popRep); diff --git a/src/eva2/server/go/operators/mutation/InterfaceMutationGenerational.java b/src/eva2/server/go/operators/mutation/InterfaceMutationGenerational.java index 40529a07..d3aa47ca 100644 --- a/src/eva2/server/go/operators/mutation/InterfaceMutationGenerational.java +++ b/src/eva2/server/go/operators/mutation/InterfaceMutationGenerational.java @@ -4,12 +4,34 @@ import eva2.server.go.populations.Population; /** * An interface for a mutation operator which is updated on a generational basis, such as - * the 1/5-success rule. + * the 1/5-success rule. Mind that not all EA use dogmatic selection and thus not all + * will inform this interface. So far, only ES and GA will. * * @author mkron * */ public interface InterfaceMutationGenerational extends InterfaceMutation { - public void adaptAfterSelection(Population oldGen, Population selected); - public void adaptGenerational(Population selectedPop, Population parentPop, Population newPop, boolean updateSelected); + + /** + * Perform adaption of the operator based on the selection performed by an EA. + * + * @param oldPop the initial population for the developmental step + * @param selectedPop the sup-population selected as parents for the new generation + */ + public void adaptAfterSelection(Population oldPop, Population selectedPop); + + /** + * Perform adaption of the operator based on the developmental step performed by an EA. + * The data provided for this call are the old population, the individuals selected as + * parents, and the new population created from the selected individuals. + * Usually, only the instances within the new population must be adapted. An additional tag + * indicates whether the instances of the selected population should be adapted as well, + * e.g., if they survive as elite (or in an ES "plus" strategy). + * + * @param oldPop the initial population for the developmental step + * @param selectedPop the sup-population selected as parents for the new generation + * @param newPop the new population created by the EA, should already be evaluated + * @param updateSelected if true, the selected population should be adapted as well + */ + public void adaptGenerational(Population oldPop, Population selectedPop, Population newPop, boolean updateSelected); } diff --git a/src/eva2/server/go/strategies/DifferentialEvolution.java b/src/eva2/server/go/strategies/DifferentialEvolution.java index 08d5cc5d..3c14c7b9 100644 --- a/src/eva2/server/go/strategies/DifferentialEvolution.java +++ b/src/eva2/server/go/strategies/DifferentialEvolution.java @@ -228,7 +228,7 @@ public class DifferentialEvolution implements InterfaceOptimizer, java.io.Serial indy = (AbstractEAIndividual)(pop.getEAIndividual(firstParentIndex)).getClone(); esIndy = (InterfaceDataTypeDouble)indy; } catch (java.lang.ClassCastException e) { - System.err.println("Differential Evolution currently requires InterfaceESIndividual as basic data type!"); + EVAERROR.errorMsgOnce("Differential Evolution currently requires InterfaceESIndividual as basic data type!"); return (AbstractEAIndividual)((AbstractEAIndividual)pop.get(RNG.randomInt(0, pop.size()-1))).getClone(); } double[] nX, vX, oX;