//TODO: implement maximum value public Real GetValue(IAlgorithm algorithm) { SinglePopulationPSO pso = algorithm as SinglePopulationPSO; int particles = pso.SwarmSize; double sum = 0; for (int i = 0; i < particles; i++) { Vector pos = pso.Particles[i].Position; Vector prevPos = pso.Particles[i].PreviousPosition; //calculate the difference and norm in one loop double norm = 0; for (int j = 0; j < pos.Length; j++) { double dist = pos[j] - prevPos[j]; norm += dist * dist; } sum += Math.Sqrt(norm); } return(new Real(sum / particles)); }
public Real GetValue(IAlgorithm algorithm) { SinglePopulationPSO pso = algorithm as SinglePopulationPSO; double distance = 0; Vector center = Center.GetCenter(pso.Particles); for (int i = 0; i < pso.Particles.Count; i++) { distance += DistanceMeasure.Measure(center, pso.Particles[i].Position); } return(new Real(distance / pso.SwarmSize)); }
public Real GetValue(IAlgorithm algorithm) { SinglePopulationPSO pso = algorithm as SinglePopulationPSO; int violations = 0; for (int i = 0; i < pso.Particles.Count; i++) { if (!pso.Particles[i].Position.IsInsideBounds(algorithm.Problem.ProblemDomain.DimensionBounds)) { violations++; } } return(new Real((double)violations / pso.Particles.Count)); }