/// <summary>
 /// Retrieves all particles in the same cell as the given particle. Does not include the given particle!
 /// </summary>
 /// <param name="particle">Particle identifying the cell to retrieve from</param>
 /// <returns>All partciles in the same cell</returns>
 public List<SwarmParticle> GetAdjacentParticlesWithoutGivenParticle(SwarmParticle particle)
 {
     Tuple<int, int> cellIndices = ParticlePositionToCellIndices(particle.GetPosition());
     List<SwarmParticle> neighbourhood = Mesh[cellIndices.Item1, cellIndices.Item2];
     neighbourhood.Remove(particle);
     return neighbourhood;
 }
        private void UpdateParticlePosition(SwarmParticle particle)
        {
            Vector2d Translation = particle.GetTranslation();
            Vector2d BestPosition = particle.GetBestLocation();
            Vector2d Position = particle.GetPosition();

            Translation.X = Translation.X * InertiaWeight + AccelerationConstant * GaussianRandomHelper.GetRandomValue(Mean, StandardDeviation) * (BestPosition.X - Position.X) + AccelerationConstant * GaussianRandomHelper.GetRandomValue(Mean, StandardDeviation) * (GlobalBestLocation.X - Position.X);
            Translation.Y = Translation.Y * InertiaWeight + AccelerationConstant * GaussianRandomHelper.GetRandomValue(Mean, StandardDeviation) * (BestPosition.Y - Position.Y) + AccelerationConstant * GaussianRandomHelper.GetRandomValue(Mean, StandardDeviation) * (GlobalBestLocation.Y - Position.Y);

            particle.SetTranslation(Translation);
            particle.updatePosition(Translation);
        }
        private void UpdateParticleFitness(SwarmParticle particle)
        {
            double currentFitness = FitnessStrategy.GetFitness(particle.GetPosition());
            double bestFitness = particle.GetOverallBestFitness();

            particle.SetCurrentFitness(currentFitness);

            if (currentFitness < bestFitness)
            {
                particle.UpdateFittestValues(currentFitness);
            }
        }
    void MoveSwarm()
    {
        foreach (GameObject part in particleSwarm)
        {
            SwarmParticle particle = part.GetComponent <SwarmParticle>();
            particle.Move(targetPosition, globalBestPosition, newTarget);

            if (particle.GetFitness(targetPosition) < globalBestFitness)
            {
                globalBestFitness  = particle.GetFitness(targetPosition);
                globalBestPosition = particle.transform.position;
            }
        }
        newTarget = false;
    }
 public void AddParticle(SwarmParticle particle)
 {
     Tuple<int, int> cellIndices = ParticlePositionToCellIndices(particle.GetPosition());
     Mesh[cellIndices.Item1, cellIndices.Item2].Add(particle);
     ParticleCount++;
 }
 private void UpdateParticleFitness(SwarmParticle particle)
 {
     double currentFitness = FitnessStrategy.GetFitness(particle.GetPosition());
     if (currentFitness < particle.GetCurrentFitness())
     {
         particle.SetCurrentLocationAsBest();
     }
     particle.SetCurrentFitness(currentFitness);
 }
        protected Vector3d GetColour(SwarmParticle particle)
        {
            double fitness = particle.GetCurrentFitness();

            return new Vector3d(0.0, fitness/70.0, 0.6);
        }