Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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;
        }