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