예제 #1
0
 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;
 }
예제 #2
0
        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;
        }
예제 #3
0
        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;
        }