/// <summary> /// Funkcja wykonuje Metadynamikę /// </summary> public void DoMetaDynamic() { Populationn.SortAscByProbability(); var howManyToTake = Options.nWorstGenToThrow; if (howManyToTake > Populationn.Gens.Count) { howManyToTake = Populationn.Gens.Count; } Populationn.Gens.RemoveRange(0, howManyToTake); for (int i = 0; i < howManyToTake; i++) { Populationn.Add(SimpleGensGenerator.GetSingleGen(Options, Function)); } Populationn.CalculateSimilarity(AntiGen); Populationn.SortDescByProbability(); }
/// <summary> /// Funkcja wykonuje hipermutację oraz zajmuje się dojrzewaniem /// </summary> public void DoHiperMutation() { // mutacja polegająca na tym ze jezeli wylosuje 0 to od roznicy wartosci funkcji antygenu i genu // odejmuje polowe tej wartosci a w.p.p dodaje polowe tej wartosci workingPopulation.Gens.ForEach(g => { var operation = RandomNumberGenerator.Next(0, 1); var value = Math.Abs(AntiGen.FunctionValue - g.FunctionValue); if (operation == 0) { g.FunctionValue -= (value / 2); } else { g.FunctionValue += (value / 2); } }); workingPopulation.CalculateSimilarity(AntiGen); // posortowanie i wybranie n1 najlepszych workingPopulation.SortDescByProbability(); var howManyToTake = Options.nBestGensToTake; if (howManyToTake > workingPopulation.Gens.Count) { howManyToTake = workingPopulation.Gens.Count; } var bestGens = workingPopulation.Take(howManyToTake); // dodanie i zastapienie n1 nalepszych var pCount = Populationn.Gens.Count; Populationn.Gens = Populationn.Gens.Concat(bestGens).ToList(); Populationn.SortDescByProbability(); Populationn.Gens = Populationn.Take(pCount).ToList(); }
/// <summary> /// Funkcja oblicza podobienstwo do antygenu /// </summary> public void CalculateProbabilityForPopulation() { Populationn.CalculateSimilarity(AntiGen); Populationn.SortDescByProbability(); }