Ejemplo n.º 1
0
        public ParticleSwarm(int population_size, int dimension_count, CostEvaluationMethod evaluator, double[] lower_bounds, double[] upper_bounds)
        {
            mDimensionCount = dimension_count;

            mLowerBounds = lower_bounds;
            mUpperBounds = upper_bounds;

            mParticleGenerator = (constraints) =>
            {
                SimpleParticle p = new SimpleParticle(this, mDimensionCount, constraints);
                double         lower_bound;
                double         upper_bound;
                double         range;
                for (int d = 0; d < mDimensionCount; ++d)
                {
                    lower_bound = lower_bounds[d];
                    upper_bound = upper_bounds[d];
                    range       = upper_bound - lower_bound;
                    p[d, ParticleVectorType.Position] = lower_bound + range * RandomEngine.NextDouble();
                    p[d, ParticleVectorType.Velocity] = 0;
                }
                Particle cast_p = p as Particle;
                return(cast_p);
            };

            mParticles          = new Particle[population_size];
            mLocalBestParticles = new Particle[population_size];
            mEvaluator          = evaluator;
        }
Ejemplo n.º 2
0
        public ParticleSwarm(int population_size, int dimension_count, CostEvaluationMethod evaluator, CreateParticleMethod generater = null)
        {
            mDimensionCount    = dimension_count;
            mParticleGenerator = generater;
            mEvaluator         = evaluator;

            mParticles          = new Particle[population_size];
            mLocalBestParticles = new Particle[population_size];
            mEvaluator          = evaluator;
        }
Ejemplo n.º 3
0
        public static double Solve(int population_size, int dimension_count, CostEvaluationMethod evaluator, CreateParticleMethod generator, out Particle global_best_solution, double[] lower_bounds = null, double[] upper_bounds = null, object constraints = null, double tolerance = 0.000001, int maxIterations = 100000)
        {
            ParticleSwarm <Particle> solver = new ParticleSwarm <Particle>(population_size, dimension_count, evaluator, generator);

            solver.LowerBounds = lower_bounds;
            solver.UpperBounds = upper_bounds;

            solver.Initialize(constraints);
            int    iteration                      = 0;
            double cost_reduction                 = tolerance;
            double global_best_solution_cost      = solver.GlobalBestSolutionCost;
            double prev_global_best_solution_cost = global_best_solution_cost;

            while (cost_reduction >= tolerance && iteration < maxIterations)
            {
                prev_global_best_solution_cost = global_best_solution_cost;
                solver.Iterate();
                global_best_solution_cost = solver.GlobalBestSolutionCost;
                cost_reduction            = prev_global_best_solution_cost - global_best_solution_cost;
                iteration++;
            }

            global_best_solution = solver.GlobalBestSolution.Clone() as Particle;

            return(global_best_solution_cost);
        }