private void MakeNewGeneration(int mutationsCount) { Random rnd = new Random(); /* foreach (var item in mCurrentGeneration) { mNextGeneration.Add(item); }*/ for (int f = 0; f < this.mCurrentGeneration.Count; ++f) { for (int s = 0; s < this.mCurrentGeneration.Count; ++s) { if (f != s) { s1 = new Schedule(this.mCurrentGeneration[f], this.mCurrentGeneration[s], SubjectsDifficulty); double randomNumber = rnd.NextDouble(); if (randomNumber < MutationPercentage) { s1.Mutate(mutationsCount); } /*if (s1.Not(this.compDict)) { s1 = new Schedule(SaveCopy.Timetable, mSubjectsDifficulty); s1.Shuffle(rnd); }*/ mNextGeneration[f * this.mCurrentGeneration.Count + s] = s1; } else { mNextGeneration[f * mCurrentGeneration.Count + s] = mCurrentGeneration[f]; } } } //mNextGeneration[rnd.Next(mNextGeneration.Count)].Mutate(Days * PeriodsCount); //EqualityComparer<Schedule> comp = new ScheduleComparator(false); this.mCurrentGeneration = mNextGeneration. OrderByDescending(x => { return x.Rating.Errors ; }). /*Distinct(comp).*/ToList().GetRange(0, GenerationSize); // my generation, babyy :D }