Автор работы: Пользователь скрыл имя, 21 Мая 2013 в 12:17, курсовая работа
Целью данной работы является построение математической модели, выбор метода и разработка алгоритма решения задачи, а также экспериментальная проверка и разработка рекомендаций по практическому использованию результатов решения транспортной задачи и определения стоимости транспортировки товара в зависимости от потребности в разных пунктах назначения и вместимости отдельных транспортных средств. В качестве методов решения данной задачи были выбраны: метод северо-западного угла, метод потенциалов и построение циклов.
Введение
1. Содержательное и формализованное описание задачи
2. Математическая модель задачи
3. Выбор метода и разработка алгоритма решения задачи
3.1 Получение начального базисного решения
3.2 Нахождение вводимой переменной. Метод потенциалов
3.3 Поиск выводимой переменной. Построение циклов
4. Программная реализация
5. Экспериментальная проверка и разработка рекомендаций по практическому использованию результатов
6. Руководство пользователя
Заключение
Библиографический список
Шаг 3:
а) Если невычеркнутой остается в точности одна строка или столбец, то закончить вычисления.
б) Если остается невычеркнутой только одна строка (столбец) с положительным предложением (спросом), найти базисные переменные в этой строке, используя метод наименьшей стоимости.
в) Если всем невычеркнутым строкам и столбцам соответствуют нулевые величины предложения и спроса, найти базисные переменные методом наименьшей стоимости.
г) В других случаях вычислить новые значения штрафов для невычеркнутых строк и столбцов и перейти к шагу 2. Следует отметить, что строки и столбцы с нулевыми значениями предложения и спроса не должны рассматриваться при вычислении этих штрафов.
Последний метод приводит к лучшему начальному решению, чем два других метода. Однако он сложен для реализации на ЭВМ, так как включает в себя множественные проверки, а также метод наименьшего расстояния. Несмотря на то, что метод наименьших расстояний дает лучшее начальное решение, чем метод «северо-западного» угла, он также сложен из-за большего числа различных проверок и постоянного определения минимума. Первый же рассмотренный метод наиболее прост, так базисное решение получается путем последовательного перехода по столбцам и строкам. Кроме этого стоит учитывать, что алгоритм выбора начального базисного решения не влияет на алгоритм поиска оптимального решения, то есть в любом случае дальнейшее решение задачи происходит по одной и той же схеме. Исходя из этого, при программной реализации задачи для поиска начального решения был выбран метод «северо-западного» угла. Даже если при этом потребуется большее количество итераций для поиска оптимума, более выгодно использовать этот метод, так как даже не самые современные ЭВМ могут мгновенно найти решение даже при большом объеме исходных данных, при этом структура программы будет заметно проще.
3.2 Нахождение вводимой переменной. Метод потенциалов
В методе потенциалов строке i и столбцу j ставятся в соответствие числа Ui и Vj. Для каждой базисной переменной Хij текущего решения потенциалы Ui и Vj должны удовлетворять условию:
Ui + Vj. =Сij
.
Оценки для небазисных переменных определяются исходя из формулы:
.
После этого для включения
в базис выбирается небазисная переменная,
имеющая самое большое
3.3 Поиск выводимой переменной. Построение циклов
Для нахождения выводимой переменной строится замкнутый цикл. Цикл начинается и заканчивается выбранной небазисной переменной. Он состоит из последовательности вертикальных и горизонтальных отрезков, концами которых должны быть небазисные переменные. Построение данного цикла необходимо для того, чтобы после ввода новой переменной сбалансировать значения базисных переменных.
Не существенно, в каком
направлении происходит обход цикла.
Для каждого базисного
4 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ
Основные вычислительные процедуры представлены в приложении 2.
procedure balancing() – проверяет, сбалансирована ли задача. Если нет, то происходит балансировка путем добавления соответственно строки либо столбца.
procedure north_west(ci,ri:byte):real – функция, используемая для нахождения начального базисного решения по методу северо-западного угла.
Входные параметры: ci и ri – номер строки и столбца элемента транспортной таблицы. Функция возвращает значение указанного элемента.
procedure maxnotbas(var max:real;var xi,yi:integer) – процедура нахождения максимальной небазисной переменной. Выходными данными являются сам элемент и его координаты (строка и столбец) в таблице решения.
procedure create_matr(x,x1,y,y1:integer) – процедура, составления матрицы с циклом. Входными данными являются координаты (номера строк и столбцов) двух соседних узлов цикла.
procedure search_uv(q:string) – процедура поиска узлов цикла. Входным параметром является строка, содержащая направление поиска.
procedure TForm1.BitBtn1Click(Sender: TObject) – основная вычислительная процедура, использующая при своей работе выше описанные процедуры и функции. В ней осуществляется проверка вводимой пользователем информации, балансировка задачи, а также реализованы все шаги алгоритма решения транспортной задачи.
5 Экспериментальная проверка и разработка рекомендаций по практическому использованию результатов.
Для экспериментальной проверки результатов выполнения работы следует провести расчеты вручную и сравнить их с результатом, который выдаст программа. Исходными примем произвольные данные (таблица 1), т.к. программа универсальна.
Таблица 1 – Исходные данные
Номер маршрута |
Потребность в продукции |
Вместимость транспортного средства | |||
400 |
500 |
350 |
1000 | ||
Пункты назначения | |||||
A |
B |
C |
D | ||
1 |
1,5 |
2,5 |
1,0 |
2,0 |
700 |
2 |
2,0 |
3,0 |
2,0 |
1,5 |
650 |
3 |
1,0 |
1,5 |
2,5 |
3,0 |
800 |
Проведем пошаговые итерации решения задачи.
1. Сначала нужно проверить сбалансирована ли задача:
400+500+350+1000>700+650+800
Вышеприведенное неравенство говорит о том, что данная задача не сбалансирована (т.е. для выполнения всех заказов не хватает транспортных средств), откуда следует, что необходимо ввести еще один фиктивный маршрут, т.е. дополнительное транспортное средство с нулевыми затратами на перевозку как показано в таблице 2:
Таблица 2 – Преобразованная исходная таблица
Номер маршрута |
Потребность в продукции |
Вместимость транспортного средства | |||
400 |
500 |
350 |
1000 | ||
Пункты назначения | |||||
A |
B |
C |
D | ||
1 |
1,5 |
2,5 |
1,0 |
2,0 |
700 |
2 |
2,0 |
3,0 |
2,0 |
1,5 |
650 |
3 |
1,0 |
1,5 |
2,5 |
3,0 |
800 |
4 |
0 |
0 |
0 |
0 |
100 |
Для проверки правильности
балансировки повторим первый шаг толь
уже с преобразованной
400+500+350+1000=700+650+800+
Убедившись в том, что задача сбалансирована, переходим к следующему шагу.
2. Необходимо найти начальное допустимое решение. Согласно описанным выше обстоятельствам это преобразование выполним методом северо-западного угла. В результате получим таблицу 3:
Таблица 3 – Начальное базисное решение
400-400=0 |
500-300-200=0 |
350-350=0 |
1000-100-800-100=0 |
|
400 |
300 |
700-400-300=0 | ||
200 |
350 |
100 |
650-200-350-100=0 | |
800 |
800-800=0 | |||
100 |
100-100=0 |
Выполнив это действие, мы получили набор базисных переменных: X11, X12, X22, X23, X24, X34, X44.
И соответственно небазисных переменных: X13, X14, X21, X31, X32, X33, X41, X42, X43.
3. Далее необходимо
найти вводимую в базис
4. Найдем выводимую из базиса переменную. После чего, найдя новое базисное решение, повторим предыдущий шаг. Для нахождения выводимой из базиса переменной воспользуемся методом циклов, результат которого приведен в таблице 4.
Таблица 4 – Построение цикла
400 |
300 |
||
200- |
350 |
100+ | |
X+32 |
800- | ||
100 |
В качестве выводимой переменной примем X22, так как она является минимальной среди помеченных знаком «–». Далее от переменных помеченных знаком «–» отнимем значение выводимой переменной, а к переменным, помеченных знаком «+» добавим его следует добавить. В результате получим таблицу 5.
Таблица 5 – Новое базисное решение
400 |
300 |
||
350 |
300 | ||
200 |
600 | ||
100 |
Опять стоит повторить шаг 3. Данное решение также не является оптимальным, т.к. X13=3,5>0 и, следовательно, построить цикл, который возвратится в эту переменную – невозможно. Исходя из этого, введем нулевую базисную переменную, и не будем осуществлять вывода. Т.о. получим новое базисное решение представленное в таблице 6.
Таблица 6 – Новое базисное решение
400 |
300 |
0 |
|
350 |
300 | ||
200 |
600 | ||
100 |
Полученное новое базисное решение опять не является оптимальным, поэтому введем переменную X31=0,5>0. Для того чтобы найти выводимую переменную необходимо построить цикл приведенный в таблице 7.
Таблица 7 – Построение цикла.
400- |
300 |
0+ |
|
350- |
300+ | ||
X+ 31 |
200 |
600- | |
100 |
Получим новое базисное решение (таблица 8).
Таблица 8 – Новое базисное решение.
50 |
300 |
350 |
|
650 | |||
350 |
200 |
250 | |
100 |
Полученное новое базисное решение снова не является оптимальным, поэтому введем переменную X14=2>0. И опять же для нахождения выводимой переменной необходимо построить цикл приведенный в таблице 9.
Таблица 9 – Построение цикла.
50- |
300 |
350 |
X+ 14 |
650 | |||
350+ |
200 |
250- | |
100 |