示例#1
0
        //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));
        }
示例#2
0
        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));
        }
示例#3
0
        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));
        }