     let genomeCount = genomes.count
     let width = Int(renderView.frame.width)
     let height = Int(renderView.frame.height)
+    
+    let population: [Individual] = (0..<1300)
+      .map { _ in Coordinate(random() % width, random() % height) }
+      .map { Individual.init(position: $0, genome: genomes[random() % genomeCount]) }
+ 
     let fieldSize = Coordinate(width, height)
-    
-    let population: [Individual] = (0..<500)
-      .map { _ in Coordinate(random() % width, random() % height) }
-      .map { Individual.init(fieldSize: fieldSize, position: $0, genome: genomes[random() % genomeCount]) }
-    
-    renderView.population = population
+
+    renderView.population = Population.init(fieldSize: fieldSize, population: population)
   }
   
   private func step() {
 
-    renderView.population.step()
+    renderView.population?.step(3)
     renderView.setNeedsDisplay(renderView.bounds)
     
     DispatchQueue.main.async {


class RenderView: NSView {
  
  var population: [Individual] = []
  var cellSize = 2.0

  override func draw(_ dirtyRect: NSRect) {
    guard let context = NSGraphicsContext.current()?.cgContext else {
      fatalError()
    }

    let size = cellSize
    
    context.setFillColor(NSColor.white.cgColor)
    context.fill(bounds)
    
    for individual in population {
      
      individual.genome.color.setFill()
      context.fillEllipse(in: CGRect(x: individual.position.x, y: individual.position.y, width: size, height: size))
    }
  }
}

  
  override func viewDidLoad() {
    super.viewDidLoad()
    
    setup()
  }
  
  override func viewWillAppear() {
    super.viewWillAppear()
  }
  
  override func viewDidAppear() {
