Exemplo n.º 1
0
        public void MutatePart(IBitIndividual individual, double p, SpecializedQueue indexes)
        {
            var n    = indexes.Count;
            var roll = _random.NextDouble();

            foreach (var d in CalculateOdds(p, n))
            {
                if (roll < d || indexes.IsEmpty)
                {
                    break;
                }
                roll -= d;
                individual.Flip(indexes.TakeOne());
            }
        }