Example #1
0
 public void UpdateAttractiveness(FireflyParticle a)
 {
     if (a.PersonalBestFitness < this.PersonalBestFitness)
     {
         double distance    = AbstractFunction.EuclidianDistance(a.PersonalBestPosition, this.Position);
         double exponential = Math.Pow(Math.E, -LuciferinProductionCoefficient * distance);
         Attractiveness = AttractivenessFactor * exponential;
     }
 }
Example #2
0
 public void UpdatePosition(FireflyParticle a)
 {
     for (int i = 0; i < Parameters.DIMENSION_AMOUNT; i++)
     {
         //xi,d ← xi,d + β(xj,d − xi,d ) + α(rand() − 0.5)
         if (a.PersonalBestFitness < this.PersonalBestFitness)
         {
             this.Position[i] = this.PersonalBestPosition[i]
                                + Attractiveness * (a.PersonalBestPosition[i] - this.Position[i])
                                + Alpha * (random.NextDouble() - 0.5);
         }
         else
         {
             this.Position[i] = this.Position[i]
                                + Alpha * (random.NextDouble() - 0.5);
         }
     }
 }
        public void UpdatePopulation(bool saveFitnessLog = false)
        {
            if (saveFitnessLog)
            {
                GlobalBestLog = new List <double>();
            }

            for (int i = 0; i < Parameters.ITERATION_AMOUNT; i++)
            {
                foreach (FireflyParticle pA in ParticleList)
                {
                    //Console.WriteLine("PB: {0}", FireflyParticle.GlobalBest);
                    //if (pA == ParticleList[1]) Console.WriteLine("X: {0} / Y:{1}", FireflyParticle.PositionGBest[0], FireflyParticle.PositionGBest[1]);

                    foreach (FireflyParticle pB in ParticleList)
                    {
                        if (pA == pB)
                        {
                            continue;
                        }

                        pA.UpdateAttractiveness(pB);
                        pA.UpdatePosition(pB);
                        pA.UpdateFitness();
                    }

                    pA.ForceBoundaries();
                }

                FireflyParticle.UpdateAttractivenessFactor();

                if (saveFitnessLog)
                {
                    GlobalBestLog.Add(FireflyParticle.GlobalBestFitness);
                }
            }
        }
 public Swarm(EFunction function)
 {
     FireflyParticle.ClearStaticFields();
     ParticleList = FireflyParticle.CreateSwarm(function);
 }