std::vector<Individual> Simulation::CreateIndividuals(
  const Parameters& parameters
) noexcept
{
  //Create parameters.GetPopSize() individuals
  // with DNA length of parameters.GetDnaLength()
  std::vector<Individual> v;
  const int dna_length{parameters.GetDnaLength()};
  std::generate_n(
    std::back_inserter(v),
    parameters.GetPopSize(),
    [dna_length]() { return CreateRandomDna(dna_length); }
  );

  assert(v.empty()
    || parameters.GetDnaLength() == static_cast<int>(v[0].GetDna().size())
  );
  assert(parameters.GetPopSize()
    == static_cast<int>(v.size())
  );
  return v;
}