public override SwarmParticleMesh UpdateSwarmPositions(SwarmParticleMesh particles)
        {
            SwarmParticleMesh newMesh = new SwarmParticleMesh(particles);

            for (int i = 0; i < particles.GetRowCount(); i++)
            {
                for (int j = 0; j < particles.GetColumnCount(); j++)
                {
                    List<SwarmParticle> neighbourhood = particles.GetListFromCell(i, j);
                    if (neighbourhood.Count > 0)
                    {

                        neighbourhood.OrderBy(n => n.GetCurrentFitness());
                        SwarmParticle fittestNeighbour = neighbourhood.Last();
                        neighbourhood.Remove(fittestNeighbour);
                        foreach (var particle in neighbourhood)
                        {
                            UpdateParticle(particle, fittestNeighbour);
                            newMesh.AddParticle(particle);
                        }
                        UpdateParticle(fittestNeighbour, fittestNeighbour);
                        newMesh.AddParticle(fittestNeighbour);
                    }
                }
            }
            return newMesh;
        }
 public MeshParticleSwarmTopology(ParticleSwarmFitnessStrategy fitnessStrategy, SwarmParticleGenerator particleGenerator, int cellSize = 10, int gridWidth = 600, int gridHeight = 600)
 {
     Particles = new SwarmParticleMesh(cellSize, gridWidth, gridHeight);
     FitnessStrategy = fitnessStrategy;
     PositionUpdater = new LocalBestSwarmPositionUpdater(fitnessStrategy);
     ParticleGenerator = particleGenerator;
 }
        public SwarmParticleMesh(SwarmParticleMesh oldParticleMesh)
        {
            CellSize = oldParticleMesh.GetCellSize();
            GridHeight = oldParticleMesh.GetGridHeight();
            GridWidth = oldParticleMesh.GetGridWidth();

            RowCount = oldParticleMesh.GetRowCount();
            ColumnCount = oldParticleMesh.GetColumnCount();

            InitialiseMesh();
        }
 public override SwarmParticleMesh UpdateSwarmPositions(SwarmParticleMesh particles)
 {
     //not needed at the moment, don't do anything
     return particles;
 }
 public override void UpdateParticlePositions()
 {
     Particles = PositionUpdater.UpdateSwarmPositions(Particles);
 }