public Population Concat(Population genom2) { Population combined = new Population(this.genom); for (int i = 0; i < genom2.GetCount(); i++) { combined.Add(genom2.Get(i)); } return combined; }
public Population Selection() { int n = genom.Count / 2; Population p = new Population(); //fitness [0,1,...,m] front index int i = 0; //int f = 0; //while (i < n) //{ // foreach (Solution s in genom) // { // if (f == s.Fitness) // { // p.Add(s); // i++; // } // } // f++; //} //while (i > n) //{ // p.Remove(p.GetCount() - 1); // i--; //} while (i < n) { p.Add(genom.ElementAt(i)); i++; } return p; }
private Population SortPopulation(Population geom) { Population pop = new Population(); for (int i = 0; i < rankings.GetFrontCount(); i++) { var front = rankings.GetFront(i); while (front.Count > 0) { var min = front.First(); for (int j = 1; j < front.Count; j++) { if(!min.Equals(front.ElementAt(j))) { if (min.Dominates(front.ElementAt(j))) { min = front.ElementAt(j); } else { // front[j] does not dominate min either // this mean that they are kinda equal if (!front.ElementAt(j).Dominates(min)) { // crowind distance if (min.Distance < front.ElementAt(j).Distance) { min = front.ElementAt(j); } } } } } pop.Add(min); front.Remove(min); } } return pop; }