private void MutateTheFrogs() { for (var i = 1; i < Pond.Count; i++) { var randomNumber = MyParameters.RandomGenerator.NextDouble(); if (!(randomNumber < ((SFLAParameters)MyParameters).ProbabilityOfMutation)) { continue; } if (CurrentFFEs >= MaximumNumberOfFitnessFunctionEvaluations) { return; } var mutada = new Frog(Pond[i]); mutada.Mutate(); Pond[i] = new Frog(mutada); } }
private void LocalSearch() { var myParameters = (SFLAParameters)MyParameters; for (var mplex = 0; mplex < myParameters.NumberOfMemeplexes; mplex++) { if (CurrentFFEs > MaximumNumberOfFitnessFunctionEvaluations) { break; } for (var iteration = 0; iteration < myParameters.MaxLocalIterations; iteration++) { if (CurrentFFEs > MaximumNumberOfFitnessFunctionEvaluations) { break; } var bestFrog = new Frog((Memeplex[mplex])[0]); var worstFrog = new Frog((Memeplex[mplex])[FrogsByMemeplex - 1]); var auxiliarFrog = new Frog(worstFrog); auxiliarFrog.Jump(bestFrog); if (MyTabuMemory.IsTabu(auxiliarFrog.SelectedPhrases)) { auxiliarFrog.Fitness = 0; } if (auxiliarFrog.Fitness > worstFrog.Fitness) { (Memeplex[mplex])[FrogsByMemeplex - 1] = auxiliarFrog; } else { auxiliarFrog = new Frog(worstFrog); auxiliarFrog.Jump(GBest); if (MyTabuMemory.IsTabu(auxiliarFrog.SelectedPhrases)) { auxiliarFrog.Fitness = 0; } if (auxiliarFrog.Fitness > worstFrog.Fitness) { (Memeplex[mplex])[FrogsByMemeplex - 1] = auxiliarFrog; } else { auxiliarFrog = new Frog(this); auxiliarFrog.RandomInitialization(); if (!MyTabuMemory.IsTabu(auxiliarFrog.SelectedPhrases)) { (Memeplex[mplex])[FrogsByMemeplex - 1] = auxiliarFrog; } } } if (auxiliarFrog.Fitness > GBest.Fitness) { GBest = new Frog(auxiliarFrog); } } Memeplex[mplex].Sort((x, y) => - 1 * x.Fitness.CompareTo(y.Fitness)); } }
public Frog(Frog origin) : base(origin) { Alfa = origin.Alfa; }