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; }
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; }
public FrankensteinParticle(FrankensteinParticleCreationParameters parameters) { this.Id = Particle.CurrentId; this.CurrentIteration = 0; this.FillParameters(parameters); }
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); }