//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; } } } }
private bool IsFitEnough(Evolution ev) { if (ev.score < average_score) { return(true); } else { return(false); } }
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); } }