コード例 #1
0
        //tidy up to ensure good packing to left/top
        private void Neaten(Evolution ev, double step)
        {
            int    counter          = 0;
            int    count_max        = 100;
            double prev_x           = 0.0;
            double prev_y           = 0.0;
            double prev_score       = 0.0;
            bool   previous_clashes = false;


            foreach (Part a_part in ev.configuration)
            {
                counter = 0;
                while (counter < count_max)
                {
                    counter++;
                    //record old setup
                    prev_x           = a_part.position_x;
                    prev_score       = ev.score;
                    previous_clashes = a_part.clashes;
                    //shuffle
                    a_part.position_x -= step;
                    ev.score           = ev.Calc_Score();
                    if (ev.score > prev_score && a_part.position_x >= a_part.border_mm && a_part.position_x < (panel.size_x - a_part.border_mm))
                    {
                        //counter = counter;
                    }
                    else
                    {
                        a_part.position_x = prev_x;
                        ev.score          = prev_score;
                        previous_clashes  = a_part.clashes;
                        counter           = count_max;
                    }
                }
                counter = 0;
                while (counter < count_max)
                {
                    counter++;
                    //record old setup
                    prev_y           = a_part.position_y;
                    prev_score       = ev.score;
                    previous_clashes = a_part.clashes;
                    //shuffle
                    a_part.position_y += step;
                    ev.score           = ev.Calc_Score();
                    if (ev.score > prev_score && a_part.position_y >= a_part.border_mm + a_part.size_y && a_part.position_y < (panel.size_y - a_part.border_mm))
                    {
                    }
                    else
                    {
                        a_part.position_y = prev_y;
                        ev.score          = prev_score;
                        counter           = count_max;
                        a_part.clashes    = previous_clashes;
                    }
                }
            }
        }
コード例 #2
0
 private bool IsFitEnough(Evolution ev)
 {
     if (ev.score < average_score)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
コード例 #3
0
        public void Fill_To_N_Evolutions(int N, List <Part> best_config)
        {
            Evolution an_evolution;

            while (evolutions.Count < N)
            {
                int         rnd = (int)(rng.NextDouble() * 100000);
                List <Part> part_list_to_add = new List <Part>();
                foreach (Part a_part in best_config)
                {
                    Part part_to_add = new Part(a_part.position_x, a_part.position_y, a_part.size_x, a_part.size_y, a_part.border_mm, a_part.placement_priority);
                    part_to_add.clashes = a_part.clashes;
                    part_list_to_add.Add(part_to_add);
                }
                an_evolution = new Evolution(part_list_to_add, rnd);
                //an_evolution.Shuffle(2, panel.size_x, panel.size_y);
                an_evolution.score = best_ever_score;
                evolutions.Add(an_evolution);
            }
        }