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 SwarmParticleMesh(SwarmParticleMesh oldParticleMesh) { CellSize = oldParticleMesh.GetCellSize(); GridHeight = oldParticleMesh.GetGridHeight(); GridWidth = oldParticleMesh.GetGridWidth(); RowCount = oldParticleMesh.GetRowCount(); ColumnCount = oldParticleMesh.GetColumnCount(); InitialiseMesh(); }