public static Placement Create(Task task, List<Vector2d> objects_sizes) { if (task != null) { Placement placement = new Placement(); placement.task = task; if (double.IsPositiveInfinity(task.RegionWidth)) placement.region_size.X = 0; else placement.region_size.X = task.RegionWidth; if (double.IsPositiveInfinity(task.RegionHeight)) placement.region_size.Y = 0; else placement.region_size.Y = task.RegionHeight; placement.objects_sizes = objects_sizes; placement.sort = new List<int>(); placement.objects_busy_numbers = new List<int>(); placement.objects_free_numbers = new List<int>(); placement.objects_busy_points = new List<Point2d>(); placement.objects_busy_square = 0; placement.object_function = double.NaN; return placement; } else return null; }
public void Calculate(bool is_auto_sort) { for (int i = 0; i <= number_of_upgrade; i++) { #region Итерация метода значимых переменных. #region Создание нового размещения и установка сортировки. placement_last = Placement.Create(this, objects_sizes); #region Установка сортировки для первого размещения. if (is_auto_sort) #region Установка случайной сортировки. placement_last.SortCreateRandom(); #endregion #endregion #endregion #region Расчёт нового размещения. placement_last.Calculate(); #endregion #region Определение лучшего размещения. if (double.IsNaN(placement_opt.ObjectFunction) || placement_opt.ObjectFunction > placement_last.ObjectFunction) placement_opt = placement_last; #endregion #endregion } }
public void ReadLine(StreamReader sr) { sr.ReadLine(); // Тип задачи. task_index = (TaskEnum)Enum.Parse(task_index.GetType(), sr.ReadLine()); sr.ReadLine(); // Количество итераций метода значимых переменных. number_of_upgrade = int.Parse(sr.ReadLine()); sr.ReadLine(); // Размеры области размещения. region_size.X = double.Parse(sr.ReadLine()); region_size.Y = double.Parse(sr.ReadLine()); sr.ReadLine(); // Размеры объектов размещения. string[] s = sr.ReadLine().Split(' '); objects_sizes = new List<Vector2d>(); for (int i = 0; i < s.Length; i += 2) objects_sizes.Add(new Vector2d { X = double.Parse(s[i]), Y = double.Parse(s[i + 1]) }); sr.ReadLine(); // Лучшее размещение. placement_opt = Placement.Create(this, objects_sizes); placement_opt.ReadLine(sr); placement_last = placement_opt; }
private void Initialize() { if (task_index == TaskEnum.Strip) region_size.X = double.PositiveInfinity; if (task_index == TaskEnum.RectangleHall) { region_size.X = double.PositiveInfinity; region_size.Y = double.PositiveInfinity; } List<Vector2d> objects_size_temp = new List<Vector2d>(); if (objects_sizes != null) for (int i = 0; i < objects_sizes.Count; i++) objects_size_temp.Add(objects_sizes[i]); objects_sizes = objects_size_temp; placement_opt = Placement.Create(this, objects_sizes); placement_last = Placement.Create(this, objects_sizes); }