コード例 #1
0
        /// <summary>
        /// zweier zufällige Punkte des besten Gen werden gekehrt.
        /// </summary>
        public List <Rucksack> MutateRucksackByAlgorithmn4(int anzahlDurchlauf)
        {
            for (int i = 0; i < anzahlDurchlauf; i++)
            {
                _rucksacke = _rucksacke.OrderByDescending(r => r.Fitness).ToList();
                Rucksack rucksackLowestFitness = _rucksacke.Last();
                _rucksacke.Remove(rucksackLowestFitness);

                Rucksack bestFitnessRucksack = _rucksacke[0];

                bool[] g1               = bestFitnessRucksack.GetGenomErsterAbschnitt();
                bool[] g2               = bestFitnessRucksack.GetGenomZweiterAbschnitt();
                bool[] mutierterGenom   = { g1[0], g1[1], g1[2], g1[3], g1[4], g2[0], g2[1], g2[2], g2[3], g2[4] };
                Random rng              = new Random();
                int    randomGenomIndex = rng.Next(mutierterGenom.Length);
                int    randomGenomIndex2;
                do
                {
                    randomGenomIndex2 = rng.Next(mutierterGenom.Length);
                } while(randomGenomIndex2 == randomGenomIndex);

                mutierterGenom[randomGenomIndex]  = !mutierterGenom[randomGenomIndex];
                mutierterGenom[randomGenomIndex2] = !mutierterGenom[randomGenomIndex2];


                Rucksack neuerMutantenRucksack = new Rucksack(mutierterGenom);
                _rucksacke.Add(neuerMutantenRucksack);
            }

            return(_rucksacke);
        }
コード例 #2
0
        /// <summary>
        /// Abschnitt 1 vom Zweitbesten und Abschnitt 2 vom Besten
        /// </summary>
        public List <Rucksack> MutateRucksackByAlgorithmn2(int anzahlDurchlauf)
        {
            for (int i = 0; i < anzahlDurchlauf; i++)
            {
                _rucksacke = _rucksacke.OrderByDescending(r => r.Fitness).ToList();
                Rucksack rucksackLowestFitness = _rucksacke.Last();
                _rucksacke.Remove(rucksackLowestFitness);
                Rucksack BestFitnessRucksack       = _rucksacke[0];
                Rucksack SecondBestFitnessRucksack = _rucksacke[1];

                bool[] g2 = BestFitnessRucksack.GetGenomErsterAbschnitt();
                bool[] g1 = SecondBestFitnessRucksack.GetGenomZweiterAbschnitt();

                bool[]   mutierterGenom        = { g1[0], g1[1], g1[2], g1[3], g1[4], g2[0], g2[1], g2[2], g2[3], g2[4] };
                Rucksack neuerMutantenRucksack = new Rucksack(mutierterGenom);
                _rucksacke.Add(neuerMutantenRucksack);
            }

            return(_rucksacke);
        }
コード例 #3
0
        /// <summary>
        /// Mit zufälligen Rucksack und zufälligen Abschnitt tauschen.
        /// </summary>
        public List <Rucksack> MutateRucksackByAlgorithmn3(int anzahlDurchlauf)
        {
            for (int i = 0; i < anzahlDurchlauf; i++)
            {
                _rucksacke = _rucksacke.OrderByDescending(r => r.Fitness).ToList();
                Rucksack rucksackLowestFitness = _rucksacke.Last();
                _rucksacke.Remove(rucksackLowestFitness);

                Random rng = new Random();
                int    randomListIndexWithoutFirst = rng.Next(1, _rucksacke.Count);

                Rucksack bestFitnessRucksack = _rucksacke[0];
                Rucksack randomRucksack      = _rucksacke[randomListIndexWithoutFirst];

                int randomAbschnitt = rng.Next(1, 3); // maxValue ist exklusive

                bool[] g1 = new bool[5];
                bool[] g2 = new bool[5];
                if (randomAbschnitt == 1)
                {
                    g1 = bestFitnessRucksack.GetGenomErsterAbschnitt();
                    g2 = randomRucksack.GetGenomZweiterAbschnitt();
                }
                else
                {
                    g1 = randomRucksack.GetGenomErsterAbschnitt();
                    g2 = bestFitnessRucksack.GetGenomZweiterAbschnitt();
                }

                bool[]   mutierterGenom        = { g1[0], g1[1], g1[2], g1[3], g1[4], g2[0], g2[1], g2[2], g2[3], g2[4] };
                Rucksack neuerMutantenRucksack = new Rucksack(mutierterGenom);
                _rucksacke.Add(neuerMutantenRucksack);
            }

            return(_rucksacke);
        }