Пример #1
0
 protected override List<IParticle> CreateParticles(SwarmCreationParameters parameters)
 {
     List<IParticle> particles = new List<IParticle>();
     for (UInt32 index = 0; index < parameters.NumberOfParameters; index++)
     {
         List<Double> newParameterList = new List<double>();
         List<Double> newSpeedsList = new List<double>();
         this.CreateRandomsList(parameters.MaximumParameterValue, parameters.MinimumParameterValue, parameters.NumberOfParameters, ref newSpeedsList, ref newParameterList);
         ISolution newParticleSolution = new ClassicSolution(parameters.SolutionFunction, parameters.AuxData, parameters.MinimumParameterValue, parameters.MaximumParameterValue);
         newParticleSolution.Parameters = newParameterList;
         newParticleSolution.UpdateFitness();
         FrankensteinParticleCreationParameters creationParams = new FrankensteinParticleCreationParameters();
         creationParams.Speeds = newSpeedsList;
         creationParams.Solution = newParticleSolution;
         creationParams.InertiaMax = this.InertiaMax;
         creationParams.InertiaMin = this.InertiaMin;
         creationParams.InertiaMaxTime = this.InertiaMaxTime;
         creationParams.FinalTopologyUpdate = this.FinalTopologyUpdate;
         creationParams.Particles = this.Particles;
         int[] connectedIds = new int[parameters.NumberOfParameters];
         for (int i = 0; i < parameters.NumberOfParticles; i++)
         {
             connectedIds[i] = i;
         }
         creationParams.ConnectedIds = new LinkedList<int>(connectedIds);
         creationParams.RandomGenerator = this.RandomGenerator;
         particles.Add(new FrankensteinParticle(creationParams));
     }
     return particles;
 }
Пример #2
0
 protected void FillParameters(FrankensteinParticleCreationParameters parameters)
 {
     base.FillParameters((InertiaParticleCreationParameters)parameters);
     this.Particles = parameters.Particles;
     this.ConnectedIds = parameters.ConnectedIds;
     this.FinalTopologyUpdate = parameters.FinalTopologyUpdate;
     this.RandomGenerator = parameters.RandomGenerator;
 }
Пример #3
0
 public FrankensteinParticle(FrankensteinParticleCreationParameters parameters)
 {
     this.Id = Particle.CurrentId;
     this.CurrentIteration = 0;
     this.FillParameters(parameters);
 }
Пример #4
0
        public void PrepareFrankensteinParticlesTests()
        {
            var mockedSolution = new Mock<ISolution>();
            mockedSolution.Name = "original";
            var copySolution = new Mock<ISolution>();
            copySolution.Name = "copy";
            mockedSolution.Setup(s => s.Fitness).Returns(1.0);
            copySolution.Setup(s => s.Fitness).Returns(2.0);
            mockedSolution.Setup(s => s.Copy()).Returns(copySolution.Object);
            mockedSolution.Setup(s => s.Parameters).Returns(new List<Double>(new Double[3] { 1.0, 1.0, 1.0 }));
            copySolution.Setup(s => s.Parameters).Returns(new List<Double>(new Double[3] { 1.0, 1.0, 1.0 }));

            this.MockedSolution = mockedSolution;
            this.CopySolution = copySolution;
            this.Speeds = new List<Double>(new Double[3] { 1.0, 1.0, 1.0 });

            FrankensteinParticleCreationParameters creationParams = new FrankensteinParticleCreationParameters();
            creationParams.Speeds = this.Speeds;
            creationParams.Solution = mockedSolution.Object;
            creationParams.InertiaMax = 1.0;
            creationParams.InertiaMin = 1.0;
            creationParams.InertiaMaxTime = 0;
            creationParams.Particles = this.CreateMockedConnectedParticles();
            int[] ids = new int[7];
            for (int i = 0; i < 7; i++)
            {
                ids[i] = i;
            }
            Random gen = new Random();
            creationParams.RandomGenerator = gen;
            creationParams.FinalTopologyUpdate = 8;
            creationParams.ConnectedIds = new LinkedList<int>(ids);
            this.Particle = new FrankensteinParticle(creationParams);
            this.Particle.Id = 0;
            creationParams.Particles.Insert(0, this.Particle);
        }