示例#1
0
        public List<Monk> Selection(Population population)
        {
            List<Monk> result = new List<Monk>();
            Random r  = new Random();
            int length = population.Chromosomes.Count;

            List<List<Monk>> groups = new List<List<Monk>>();
            List<Monk> group = new List<Monk>();

            for (int i = 0; i < length; i++)
            {
                if (i % GroupSize == 0 && i!=0)
                {
                    groups.Add(group);
                    group.Clear();
                }
                int index = r.Next(population.Chromosomes.Count);
                group.Add(population.Chromosomes.ElementAt(index));
                population.Chromosomes.RemoveAt(index);
            }
            if (group.Count > 0 )
            {
                groups.Add(group);
            }

            foreach (var gr in groups)
            {
                result.Add(gr.OrderByDescending(m => m.Fitness).First());
            }

            return result;
        }
示例#2
0
 public List<Monk> Selection(Population population)
 {
     //blank
     return new List<Monk>();
 }
示例#3
0
 public List<Monk> Selection(Population population)
 {
     throw new NotImplementedException();
 }
示例#4
0
        void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            var worker = sender as BackgroundWorker;
            List<object> args= e.Argument as List<object>;
            int loops = (int)args.ElementAt(0);
            int max_fitness = (int) args.ElementAt(1);
            elitarism_on = (bool)args.ElementAt(2);

            if (board != null)
            {
                int i = 0;
                Population pop = new Population(board);
                pop.GenerateFirstPopulation(pop_size, rand);
                worker.ReportProgress(0, pop.ToString());

                while ((i < loops) && (!pop.Chromosomes.First().Fitness.Equals(max_fitness)) )
                {
                    pop.Selection(elite_rate, selection,elitarism_on);
                    pop.Breed(rand,mutation_chance);
                    pop.Sort();
                    i++;
                    worker.ReportProgress(0, pop.ToString());
                }
                if (i != loops)
                {
                    e.Result = i;
                }
                else
                    e.Result = -1;
            }
            else
            {
                MessageBox.Show("Board not yet loaded");
            }
        }