Пример #1
0
        /// <summary>
        /// Преобразовать объект задачи в объект, который будет сериализоваться.
        /// </summary>
        /// <param name="problem">Объект задачи.</param>
        /// <returns>Объект сериализуемой задачи.</returns>
        public JSONProblem ToJsonProblem(Problem problem)
        {
            try
            {
                // Сериализуемый объект хранит только значения
                var result = new JSONProblem
                {
                    Name      = problem.Name,
                    Consumers = problem.Consumers.Select(q => q.Demand).ToArray(),
                    Suppliers = problem.Suppliers.Select(q => q.Capacity).ToArray(),
                    Costs     = new int[problem.Suppliers.Length, problem.Consumers.Length]
                };

                // Преобразуем стоимости из массива в матрицу
                var height = problem.Suppliers.Length;
                var width  = problem.Consumers.Length;

                for (int i = 0; i < height; i++)
                {
                    for (int j = 0; j < width; j++)
                    {
                        result.Costs[i, j] = problem.Routes[i * width + j].Cost;
                    }
                }

                return(result);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            return(null);
        }
Пример #2
0
        /// <summary>
        /// Преобразовать объект задачи из сериализуемого объекта задачи.
        /// </summary>
        /// <param name="problem">Объект сериализуемой задачи.</param>
        /// <returns>Объект задачи.</returns>
        public Problem FromJsonProblem(JSONProblem problem)
        {
            try
            {
                var result = new Problem
                {
                    Name      = problem.Name,
                    Consumers = problem.Consumers.Select(q => new Consumer {
                        Name = "B", Demand = q
                    }).ToArray(),
                    Suppliers = problem.Suppliers.Select(q => new Supplier {
                        Name = "A", Capacity = q
                    }).ToArray(),
                };

                var height = problem.Suppliers.Length;
                var width  = problem.Consumers.Length;

                var routes = new Route[height * width];

                for (int i = 0; i < height; i++)
                {
                    for (int j = 0; j < width; j++)
                    {
                        routes[i * width + j] = new Route
                        {
                            Supplier = result.Suppliers[i],
                            Consumer = result.Consumers[j],
                            Cost     = problem.Costs[i, j]
                        };
                    }
                }

                result.Routes = routes;

                return(result);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            return(null);
        }