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