public Population(Population population)
 {
     this.Gens = new List<Gen>();
     foreach (var antibody in population.Gens)
     {
         Gens.Add(antibody.Copy());
     }
 }
        /// <summary>
        /// Funkcja zwraca populację jako obiekt klasy Populacja
        /// </summary>
        /// <param name="options"></param>
        /// <param name="funkcja"></param>
        /// <returns></returns>
        public static Population GetGensAsPopulation(AlgorithmOptions options, Func<double, double> funkcja)
        {
            var population = new Population();

            for (int i = 0; i < options.MaxGens; i++)
            {
                population.Add(GetRandomGen(options, funkcja));
            }

            return population;
        }
        public Population Copy(Population populacja)
        {
            var copyPopulation = new Population();

            foreach (var antibody in populacja.Gens)
            {
                copyPopulation.Add(antibody.Copy());
            }

            return copyPopulation;
        }
 /// <summary>
 /// Funkcja czysci zmienne
 /// </summary>
 private void Init()
 {
     Populationn = null;
     workingPopulation = null;
     AntiGen = null;
     EpochCount = 0;
 }
 /// <summary>
 /// Funkcja Przepisuje początkową populację
 /// </summary>
 public void PrepareInitialPopulation()
 {
     Populationn = SimpleGensGenerator.GetGensAsPopulation(options, Function);
 }
        /// <summary>
        /// Funkcje wykonuje selekcję klonalną
        /// </summary>
        public void DoClonalSelection()
        {
            var gensForCloning = Populationn.Gens.Take(Options.nBestGensToTake).ToList();

            workingPopulation = new Population();
            var maxClones = options.MaxCloneCountForMaxProbability;

            foreach (var gen in gensForCloning)
            {
                for (int i = 0; i < maxClones; i++)
                {
                    workingPopulation.Add(gen.Copy());
                }

                maxClones -= options.MaxDiscountOfClones;
                if (maxClones <= 0)
                {
                    maxClones = 1;
                }

            }

            workingPopulation.SortDescByProbability();
        }