diff --git a/src/eva2/server/go/populations/Population.java b/src/eva2/server/go/populations/Population.java index bc59c698..dc1993d5 100644 --- a/src/eva2/server/go/populations/Population.java +++ b/src/eva2/server/go/populations/Population.java @@ -75,6 +75,7 @@ public class Population extends ArrayList implements PopulationInterface, Clonea // a sorted queue (for efficiency) transient private ArrayList sortedArr = null; private Comparator lastSortingComparator = null; + private InterfaceDistanceMetric popDistMetric = null; // an associated metric // private AbstractEAIndividualComparator historyComparator = null; public static final String funCallIntervalReached = "FunCallIntervalReached"; @@ -190,7 +191,8 @@ public class Population extends ArrayList implements PopulationInterface, Clonea this.notifyEvalInterval = population.notifyEvalInterval; this.initMethod = population.initMethod; this.aroundDist = population.aroundDist; - this.seedCardinality = population.seedCardinality.clone(); + this.seedCardinality = population.seedCardinality.clone(); + if (population.getPopMetric()!=null) this.popDistMetric = (InterfaceDistanceMetric)population.popDistMetric.clone(); if (population.seedPos!=null) this.seedPos = population.seedPos.clone(); // this.m_Listener = population.m_Listener; if (population.listeners != null) this.listeners = (ArrayList)population.listeners.clone(); @@ -282,6 +284,7 @@ public class Population extends ArrayList implements PopulationInterface, Clonea this.m_History = new LinkedList(); this.m_Generation = 0; this.m_FunctionCalls = 0; + double[] popSeed = null; // evaluationTimeHashes = null; // evaluationTimeModCount = -1; if (this.m_Archive != null) { @@ -295,23 +298,45 @@ public class Population extends ArrayList implements PopulationInterface, Clonea createRLHSampling(this, false); break; case aroundSeed: + case aroundRandomSeed: AbstractEAIndividual template = (AbstractEAIndividual) getEAIndividual(0).clone(); - if (template.getDoublePosition().length<=seedPos.length) { - if (template.getDoublePosition().length distances = null; if (calcVariance) distances = new ArrayList(size()); @@ -2103,7 +2140,10 @@ public class Population extends ArrayList implements PopulationInterface, Clonea AbstractEAIndividual neighbor, indy = getEAIndividual(i); int neighborIndex = getNeighborIndex(i); if (neighborIndex >= 0) neighbor = getEAIndividual(neighborIndex); - else return null; + else { + System.err.println("Warning, neigbhorIndex<0 in Population.getAvgDistToClosestNeighbor"); + return null; + } if (normalizedPhenoMetric){ d = metric.distance(indy, neighbor); } else { @@ -2355,7 +2395,7 @@ public class Population extends ArrayList implements PopulationInterface, Clonea } public void clearHistory() { - m_History.clear(); + if (m_History!=null) m_History.clear(); } /** @@ -2412,7 +2452,7 @@ public class Population extends ArrayList implements PopulationInterface, Clonea public String seedCardinalityTipText() { return "The initial cardinality for binary genotype individuals, given as pair of mean and std.dev."; } - + // /** // * Mark the population at the current state as evaluated. Changes to the modCount or hashes of individuals // * will invalidate the mark. diff --git a/src/eva2/server/go/populations/PopulationInitMethod.java b/src/eva2/server/go/populations/PopulationInitMethod.java index 4cda571c..dbdb8740 100644 --- a/src/eva2/server/go/populations/PopulationInitMethod.java +++ b/src/eva2/server/go/populations/PopulationInitMethod.java @@ -1,5 +1,5 @@ package eva2.server.go.populations; public enum PopulationInitMethod { - individualDefault, randomLatinHypercube, aroundSeed, binCardinality; + individualDefault, randomLatinHypercube, aroundSeed, binCardinality, aroundRandomSeed; }