Beispiel #1
0
        private ParticleSwarmOptimization CreatePsoRastriginSample()
        {
            ParticleSwarmOptimization pso = new ParticleSwarmOptimization();

            #region Problem Configuration
            var problem  = new SingleObjectiveTestFunctionProblem();
            var provider = new SOTFInstanceProvider();
            problem.Load(provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name == "Rastrigin Function")));
            problem.SolutionCreatorParameter.Value = new UniformRandomRealVectorCreator();
            #endregion
            #region Algorithm Configuration
            pso.Name                         = "Particle Swarm Optimization - Rastrigin";
            pso.Description                  = "A particle swarm optimization algorithm which solves the 2-dimensional Rastrigin test function.";
            pso.Problem                      = problem;
            pso.Inertia.Value                = 0.721;
            pso.MaxIterations.Value          = 200;
            pso.NeighborBestAttraction.Value = 1.193;
            pso.PersonalBestAttraction.Value = 1.193;
            pso.SwarmSize.Value              = 40;

            pso.TopologyInitializer   = pso.TopologyInitializerParameter.ValidValues.OfType <SPSORandomTopologyInitializer>().First();
            pso.TopologyUpdater       = pso.TopologyUpdaterParameter.ValidValues.OfType <SPSOAdaptiveRandomTopologyUpdater>().First();
            pso.Seed.Value            = 0;
            pso.SetSeedRandomly.Value = true;
            #endregion
            pso.Engine = new ParallelEngine.ParallelEngine();
            return(pso);
        }
Beispiel #2
0
        public void ShouldRun()
        {
            var pso = new ParticleSwarmOptimization(2, 10, 10, -10, (double[] d) => { return(Math.Abs((d[0] + d[1]) - 5)); }, (double f) => { return(f == 0); }, FitnessMethod.Minimize);

            pso.RunUntilTargetReached();
            Assert.True(pso.BestSwarmFitness == 0);
        }
        private ParticleSwarmOptimization CreatePsoSchwefelSample()
        {
            ParticleSwarmOptimization pso = new ParticleSwarmOptimization();

            #region Problem Configuration
            var problem = new SingleObjectiveTestFunctionProblem();
            problem.BestKnownQuality.Value           = 0.0;
            problem.BestKnownSolutionParameter.Value = new RealVector(new double[] { 420.968746, 420.968746 });
            problem.Bounds = new DoubleMatrix(new double[, ] {
                { -500, 500 }
            });
            problem.EvaluatorParameter.Value       = new SchwefelEvaluator();
            problem.Maximization.Value             = false;
            problem.ProblemSize.Value              = 2;
            problem.SolutionCreatorParameter.Value = new UniformRandomRealVectorCreator();
            #endregion
            #region Algorithm Configuration
            pso.Name                         = "Particle Swarm Optimization - Schwefel";
            pso.Description                  = "A particle swarm optimization algorithm which solves the 2-dimensional Schwefel test function (based on the description in Pedersen, M.E.H. (2010). PhD thesis. University of Southampton)";
            pso.Problem                      = problem;
            pso.Inertia.Value                = 10;
            pso.MaxIterations.Value          = 1000;
            pso.NeighborBestAttraction.Value = 0.5;
            pso.PersonalBestAttraction.Value = -0.01;
            pso.SwarmSize.Value              = 50;

            var inertiaUpdater = pso.InertiaUpdaterParameter.ValidValues
                                 .OfType <ExponentialDiscreteDoubleValueModifier>()
                                 .Single();
            inertiaUpdater.StartValueParameter.Value = new DoubleValue(10);
            inertiaUpdater.EndValueParameter.Value   = new DoubleValue(1);
            pso.InertiaUpdater = inertiaUpdater;

            pso.ParticleCreator = pso.ParticleCreatorParameter.ValidValues
                                  .OfType <RealVectorParticleCreator>()
                                  .Single();
            var swarmUpdater = pso.SwarmUpdaterParameter.ValidValues
                               .OfType <RealVectorSwarmUpdater>()
                               .Single();
            swarmUpdater.VelocityBoundsIndexParameter.ActualName = "Iterations";
            swarmUpdater.VelocityBoundsParameter.Value           = new DoubleMatrix(new double[, ] {
                { -10, 10 }
            });
            swarmUpdater.VelocityBoundsStartValueParameter.Value      = new DoubleValue(10.0);
            swarmUpdater.VelocityBoundsEndValueParameter.Value        = new DoubleValue(1.0);
            swarmUpdater.VelocityBoundsScalingOperatorParameter.Value = swarmUpdater.VelocityBoundsScalingOperatorParameter.ValidValues
                                                                        .OfType <ExponentialDiscreteDoubleValueModifier>()
                                                                        .Single();

            pso.TopologyInitializer   = null;
            pso.TopologyUpdater       = null;
            pso.SwarmUpdater          = swarmUpdater;
            pso.Seed.Value            = 0;
            pso.SetSeedRandomly.Value = true;
            #endregion
            pso.Engine = new ParallelEngine.ParallelEngine();
            return(pso);
        }
Beispiel #4
0
        public void ShouldRun10Times()
        {
            int i   = 0;
            var pso = new ParticleSwarmOptimization(2, 10, 50, -50, (double[] d) => { return(Math.Abs((d[0] + d[1]) - 5)); }, (double f) =>
            {
                i++;
                return(i == 10);
            }, FitnessMethod.Minimize);

            pso.RunUntilTargetReached();
            Assert.True(i == 10);
        }
Beispiel #5
0
        public void ShouldMaximizeFunction()
        {
            int i   = 0;
            var pso = new ParticleSwarmOptimization(2, 10, 50, -50, (double[] d) => { return(Math.Abs((d[0] + d[1]) - 5)); }, (double f) =>
            {
                i++;
                return(i == 10);
            }, FitnessMethod.Maximize);
            double startBestFitness = pso.BestSwarmFitness;

            pso.RunUntilTargetReached();
            Assert.True(pso.BestSwarmFitness > startBestFitness);
        }