예제 #1
0
        private PunktyFunkcja Crossover(List <PunktyFunkcja> populacja)
        {
            PunktyFunkcja pierwszy = new PunktyFunkcja(populacja[random.Next(0, populacja.Count)].Punkty);
            PunktyFunkcja drugi    = new PunktyFunkcja(populacja[random.Next(0, populacja.Count)].Punkty);

            List <int> indexy = new List <int>();

            for (int i = 0; i < populacja[0].Punkty.Length; i++)
            {
                indexy.Add(i);
            }
            //pierwsza polowa na pierwszy
            //druga polowa na drugi
            List <int> indexyLosowe = new List <int>();

            for (int i = 0; i < (int)(populacja[0].Punkty.Length / 2); i++)
            {
                int index = random.Next(0, indexy.Count);
                indexyLosowe.Add(indexy[index]);
                indexy.RemoveAt(index);
            }
            double[] punkty = new double[populacja[0].Punkty.Length];

            foreach (int x in indexy)
            {
                punkty[x] = pierwszy.Punkty[x];
            }
            foreach (int x in indexyLosowe)
            {
                punkty[x] = drugi.Punkty[x];
            }

            return(new PunktyFunkcja(punkty));
        }
예제 #2
0
 private void Mutacja(PunktyFunkcja x)
 {
     for (int i = 0; i < x.Punkty.Length; i++)
     {
         double liczba = (random.NextDouble() - 0.5) * 0.3;
         x.Punkty[i] = x.Punkty[i] + liczba;
     }
 }