Лабораторная №2. Базисные решения транспортной задачи
Скачать 121 Kb.
|
Федеральное государственное бюджетное образовательное учреждение высшего образования «Саратовский государственный технический университет имени Гагарина Ю.А.» Кафедра «Системотехника и управление в технических системах» Лабораторная работа №2 по дисциплине «Системный анализ и исследование операций» на тему «Базисные решения транспортной задачи» для направления подготовки (27.03.02) 221400.62 – Управление качеством Профиль «Управление качеством в производственно-технологических системах» Работу выполнил студент Тришкова Анастасия Владимировна ИнЭТМ, б-УПРК31, очная форма обучения Номер зачетной книжки 171429 Руководитель работы Преподаватель кафедры Миргородская Е.Е. Саратов – 2020 Цель работы: ознакомиться с методами базисного решения транспортных задач линейного программирования, а именно, с методом северо-западного угла. Постановка задачи Имеются 5 пунктов отправления однородного груза и 4 пункта его назначения. Груз находится в 5 пунктах отправления в количестве a1, a2, a3, a4, a5 тонн соответственно, и его требуется доставить в 3 пункта назначения соответственно b1, b2, b3, b4. Расстояния в сотнях километров между пунктами отправления и назначения приведены в матрице D: Найти такой план перевозок, при котором общие затраты на перевозку грузов будут минимальными. Указания: 1) считать стоимость перевозок пропорциональной количеству груза и расстоянию, на которое груз перевозится, т.е. для решения задачи достаточно минимизировать общий объем плана, выраженный в тонно-километрах; 2) для решения задачи использовать методы северо-западного угла, наименьшей стоимости и потенциалов. Стоимость доставки единицы груза из каждого пункта отправления в соответствующие пункты назначения задана матрицей тарифов Вариант 8. Текст программы using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication11 { class Program { struct Element { public int Delivery { get; set; } public int Value { get; set; } public static int FindMinElement(int a, int b) { if (a > b) return b; if (a == b) { return a; } else return a; } } static void Main(string[] args) { int i = 0; int j = 0; int n; Console.ForegroundColor = ConsoleColor.Blue; Console.WriteLine("Введите количество A"); n = Convert.ToInt32(Console.ReadLine()); int[] a = new int[n]; Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Введите количество B"); int m = Convert.ToInt32(Console.ReadLine()); int[] b = new int[m]; Element[,] C = new Element[n, m]; Console.ForegroundColor = ConsoleColor.DarkBlue; Console.WriteLine("Введите a[i]"); for (i = 0; i < a.Length; i++) { a[i] = Convert.ToInt32(Console.ReadLine()); } Console.WriteLine("Введите b[i]"); for (j = 0; j < b.Length; j++) { b[j] = Convert.ToInt32(Console.ReadLine()); } Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Введите C[i][j]"); for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { Console.Write("a[{0},{1}] = ", i, j); Console.ForegroundColor = ConsoleColor.Red; C[i, j].Value = Convert.ToInt32(Console.ReadLine()); Console.ResetColor(); } } i = j = 0; // идём с северо-западного элемента while (i < n && j < m) { try { if (a[i] == 0) { i++; } if (b[j] == 0) { j++; } if (a[i] == 0 && b[j] == 0) { i++; j++; } C[i, j].Delivery = Element.FindMinElement(a[i], b[j]); a[i] -= C[i, j].Delivery; b[j] -= C[i, j].Delivery; } catch { } } //выводим массив на экран for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { if (C[i, j].Delivery != 0) { Console.ForegroundColor = ConsoleColor.Blue; Console.Write("{0}", C[i, j].Value); Console.ForegroundColor = ConsoleColor.Red; Console.Write("({0})", C[i, j].Delivery); Console.ResetColor(); } else Console.Write("{0}({1})", C[i, j].Value, C[i, j].Delivery); } Console.WriteLine(); } int ResultFunction = 0; //считаем целевую функцию for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { ResultFunction += (C[i, j].Value * C[i, j].Delivery); } } Console.WriteLine(" Result = {0}", ResultFunction); i = 0; j = 0; int[] u = new int[n]; int[] v = new int[m]; Console.ReadLine(); } } } Контрольные примеры Вывод В данной работе ознакомились с методами базисного решения транспортных задач линейного программирования, а именно, с методом северо-западного угла. Копировал Формат А4 |