Fix bug in PSO implementation.

This commit is contained in:
Fabian Becker 2014-11-06 11:27:32 +01:00
parent b7749711ca
commit 3358a469a3

View File

@ -1478,23 +1478,24 @@ public class ParticleSwarmOptimization extends AbstractOptimizer implements java
@Override @Override
public void setPopulation(Population pop) { public void setPopulation(Population pop) {
this.population = pop; this.population = pop;
if (pop.size() != pop.getTargetSize()) { // new particle count! if (pop.size() > 0 && pop.size() != pop.getTargetSize()) { // new particle count!
tracedVelocity = null; tracedVelocity = null;
initializeByPopulation(null, false); initializeByPopulation(null, false);
bestIndividual = pop.getBestEAIndividual();
} else { } else {
for (int i = 0; i < pop.size(); i++) { for (int i = 0; i < pop.size(); i++) {
AbstractEAIndividual indy = pop.getEAIndividual(i); AbstractEAIndividual indy = pop.getEAIndividual(i);
if (indy == null) { if (indy == null) {
System.err.println("Error in PSO.setPopulation!"); System.err.println("Error in PSO.setPopulation!");
} else if (!indy.hasData(partTypeKey)) { } else if (!indy.hasData(this.partTypeKey)) {
initIndividualDefaults(indy, initialVelocity); initIndividualDefaults(indy, initialVelocity);
initIndividualMemory(indy); initIndividualMemory(indy);
indy.putData(indexKey, i); indy.putData(indexKey, i);
indy.setIndividualIndex(i); indy.setIndividualIndex(i);
} }
} }
bestIndividual = pop.getBestEAIndividual();
} }
bestIndividual = pop.getBestEAIndividual();
} }
@Override @Override