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(); }