public void Mutate(Mutator mutator, int maxSize, float percent, float countPercent) { int flipCount = (int)((_knapsack.ItemValues.Length * percent) * 0.5f); int count = (int)((maxSize * percent) * 0.5f); Mutator.Shuffle(_configurations); List <Configuration> newConfigs = new List <Configuration>(count); for (int i = 0; i < count && i < _configurations.Count; i++) { Configuration config = new Configuration(_configurations[i]); config.Mutate(mutator, flipCount); newConfigs.Add(config); } _configurations.AddRange(newConfigs); }
public void MutateDuplicates(Mutator mutator, float percent) { int flipCount = (int)((_knapsack.ItemValues.Length * percent) * 0.5f); List <Configuration> newConfigs = new List <Configuration>(); if (_configurations.Count > 0) { newConfigs.Add(_configurations[0]); } for (int i = 1; i < _configurations.Count; i++) { if (_configurations[i].Same(_configurations[i - 1])) { Configuration config = _configurations[i]; config.Mutate(mutator, flipCount); newConfigs.Add(config); } else { newConfigs.Add(_configurations[i]); } } _configurations = newConfigs; }