Example #1
0
        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;
        }
Example #2
0
File: Task.cs Project: Ring-r/opt
        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
            }
        }
Example #3
0
File: Task.cs Project: Ring-r/opt
        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;
        }
Example #4
0
File: Task.cs Project: Ring-r/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);
        }