Решение транспортной задачи

ИНСТИТУТ ТРАНСПОРТА И СВЯЗИ

ФАКУЛЬТЕТ КОМПЬЮТЕРНЫХ НАУК И ЭЛЕКТРОНИКИ





















Курсовая работа

Тема: "Решение транспортной задачи"





Выполнила: Долгополова Анастасия 4902BD















Рига

2010






Оглавление



	1. Постановка задачи

	2. Формулировка задачи

	3. Теоретическое обоснование. Общие вопросы

	4. Описание алгоритма нахождения потока минимальной стоимости

	5. Решение индивидуального задания по шагам

	6. Программа (Mathcad)

	7. Исходные данные

	8. Результат программы

	9. Конечные результаты

Вывод






Постановка задачи



Математическая постановка задачи. Общая постановка транспортной задачи состоит в определении оптимального плана перевозок некоторого однородного груза k-пунктов отправления а1,а2,…аi в m пунктов назначения b1,b2,…bj. При этом в качестве критерия оптимальности обычно берется либо минимальная стоимость всего груза, либо минимальное время его доставки. Данная транспортная задача была рассмотрена, где в качестве критерия оптимальности была взята минимальная стоимость перевозок все груза. Были введены следующие обозначения:

k – число поставщиков;

m – число потребителей;

i – индекс производителя i =1,к

j – индекс потребителя j = 1,m

а1 – возможности i-ro производителя

bj – спрос j-ro потребителя

сi,j – транспортные издержки (расходы) за доставку продукции от i к j.

xi,j – объемы перевозок от i к j.

Требуется составить план перевозок для которого:

1. все потребители удовлетворены

2. общие транспортные расходы минимальны

Требуется минимизировать функцию:

	 



Ограничения по производству:



 

 




Общая сумма производимой продукции больше или равна спросу:



 



Следовательно ci,j тарифы перевозок единицы груза из i-го пункта отправления в j-й пункт назначения, через ai – запасы груза в i-м пункте отправления, через bj – потребности в грузе в j-м пункте назначения, а через хi,j – количество единиц груза, переводимого из i-го пункта определений в j-й пункт назначения. Тогда математическая постановка транспортной задачи состоит в определении минимального значения функции.



2. Формулировка задачи



Число производителей

k=3

	а1=38

	Объем производимой продукции

	а2=45

	 а3=97

	

	 



Число потребителей

m=4

	b1=42

	b2=35

	Потребности потребителей:

	b3=63

	B4=15




 



Производители

Потребители



j=1

j=2

j=3

j=4

i=1

10

11

18

32

i=2

16

14

20

25

i=3

26

28

22

30





Рис. 1



На рисунке 1 представлен исходный граф, который иллюстрирует транспортную задачу. Для решения данной задачи требуется использовать стандартную форму фиксированного источника и стока. Каждый производитель связан с каждым потребителем. Источник не может иметь связи с потребителем, но зато каждый потребитель, в свою очередь, связан с фиктивным стоком. В обозначении дуги присутствует два параметра. Первый параметр указывает пропускную способность дуги, второй параметр показывает стоимость пересылки единицы потока на дуге. Так, например, из источника выходят дуги содержащие ограничения по пропускной способности, т.к. данная величина характеризует производительную возможность каждого поставщика, стоимость данной дуги равна нулю, т.к. источник – фиксированный элемент нашего графа. Такая же ситуация обстоит с дугами, которые втекают в сток. Дуги, которые выходят из i-ых вершин (производители) и входят j-ые вершины (потребители), т.е. соединяющие поставщика со складок, характеризуются тоже двумя параметрами. Только в этом случае, для данных дуг, в качестве первого параметра берется пропускная способность дуги равная бесконечности, а второй показатель – стоимость пересылки единицы потока.



3. Теоретическое обоснование. Общие вопросы



Сеть (транспортная сеть) – частный случай ориентированного графа. Транспортная сеть G=( V,E) – ориентированный граф, в котором каждое ребро имеет неотрицательную пропускную способность. Выделяются две вершины: источник v и сток u такие, что любая другая вершина сети лежит на пути из v в u. v – это единственная вершина (v – источник ), которая не содержит входящих дуг , а содержит только выходящие дуги. u – это единственная вершина (u - сток), которая не содержит выходящих дуг. Все остальные вершины – промежуточные вершины. Для любой промежуточной вершины существует путь из источника в сток. Сеть не содержит контуров. Если для сети указаны пропускные способности, то такая сеть называется транспортной сетью.

Поток – это определенная величина на дуге е. Поток в сети G=( V,E) – это функция f, заданная на дугах сети, значение на дуге е – это величина на дуге е. Для всех промежуточных вершин соответствует сумма величин потоков на дугах входящих в вершину w, которая равна выходящему из вершины потоку.



 



Величина потока в сети.

Величина всего потока в сети модуля равна сумме величин потока выходящих из источника или сумме входящих величин потока входящих в сток.



 



Поток минимальной стоимости – задача о потоке минимальной стоимости состоит в нахождении самого дешевого способа передачи определенного количества потока через транспортную сеть.

Обозначения:

Для всех дуг имеется пропускная способность: 

Стоимость пересылки единицы потока по дуге e: C(e)

Накладываются следующие условия:

Ограничение пропускной способности . Поток не может превысить пропускную способность.

Антисимметричность: . Поток из u в v должен быть противоположен потоку из v в u.



 



4. Описание алгоритма нахождения потока минимальной стоимости



Вход: транспортная сеть G=( V,E)с пропускной способностью дуг B(e)

Выход: максимальный поток с минимальной стоимостью.

Идея: Каждая итерация ставит своей целью увеличить поток в сети. Для этих целей предназначен инкрементальный граф, который позволяет увеличить поток на некоторую фиксированную величину. Наличие прямых дуг позволяет увеличить поток на соответствующей дуге сети. Обратная дуга уменьшает поток. Алгоритм заканчивается когда в инкрементальном графе нет пути от источника к стоку.

Алгоритм:

Шаг 0

Данный шаг осуществляется только один раз. Вначале мы присваиваем всем дугам нулевой поток: 

Шаг 1

Для текущего потока строится инкрементальный граф. Прямые дуги имеются, если поток на этой дуге меньше, чем пропускная способность:



 



Обратные дуги (дуги противоположны по отношению к ориентации прямых дуг) имеются, если на дугах имеется поток.



 



Каждой дуге переписываем стоимость дуги. Если е прямая, то длинна, равна стоимости пересылки, если е обратная, то ее длинна – это стоимость, но при отрицательном значении.

Назначаем длины дуг для инкрементального графа:

Для прямой дуги: e:C(e)

Для обратной дуги: e: - C(e)

Шаг 2

Нахождение кратчайшего пути в инкрементальном графе из источника v в сток u. Если такого пути нет, то происходит конец алгоритма. Найденный путь является максимальным.

Шаг 3

Нахождение минимального Δ. Просматриваем дуги кратчайших путей в инкрементальном графе. Для каждой дуги определяем величину Δ.

Для каждой прямой дуги:



 



Для каждой обратной дуги:



 



Величина, на которую можно увеличить поток. Находим минимальное значение на всех этих дугах.



 



Шаг 4

Наращивание потока в сети. Корректируем поток на дугах в соответствии последнего пути в инкрементальном графе.

На этих дугах, поток изменяется по правилам:

Для прямых дуг:



 



Для обратных дуг:



 



Алгоритм завершается, если заданная величина потока достигнута.

Переход к шагу 1.






5. Решение индивидуального задания по шагам



	

	

	Рис. 2. Нулевой поток.

	

	

	

	Рис.3. Инкрементальный граф

	




	

	

	Рис. 4. Увеличения потока в сети

	

	

	

	Рис.5. Инкрементальный граф

	

	


	

	Рис. 6. Увеличение потока в сети

	

	

	

	Рис.7. Инкрементальный граф






	

	

	Рис. 8. Увеличение потока в сети

	

	

	

	Рис.9. Инкрементальный граф






	

	

	Рис. 10. Увеличение потока в сети

	

	

	

	Рис.11. Инкрементальный граф






	

	

	Рис. 12. Увеличение потока в сети

	

	

	

	Рис.13. Инкрементальный граф






	

	

	Рис. 14. Увеличение потока в сети

	

	

	

	

	Рис. 15. Инкрементальный граф






	

	

	Рис. 16. Увеличение потока в сети. Конец алгоритма.

	

	6. Программа (Mathcad)

	

Исходные данные:

Число вершин n=9

Очень большое число q=∞

Заданная величина потока Givenflof =155

Пропускная способность дугСтоимость пересылки по дугам







Где, P – поток в сети; Tekflow – текущая величина потока, Givenflofw – заданная величина потока, Vect – величина на данной дуге, L -метки








7. Результаты программы







Величина потока










Стоимость потока

Price – стоимость









	8. Конечный результат программы

	

	Данная программа была решена двумя способами: в ручную и в среде MathCad. Результаты решения обеих вариантов совпадают, значит, можно сделать вывод о том, что поставленная транспортная задача, была решена, верно. По результатам вычислений, можно составить следующий план перевозок:

	

	

	Рис. 17. Конечный результат




	Потребитель b1 получает от поставщика a1 38 единиц товара

	Потребитель b1 получает от поставщика a2 4 единиц товара

	Потребитель b2 получает от поставщика a2 35 единиц товара

	Потребитель b4 получает от поставщика a2 6 единиц товара

	Потребитель b3 получает от поставщика a3 63 единиц товара

	Потребитель b4 получает от поставщика a3 9 единиц товара

	У поставщика а3 осталось 25 единиц товара не реализовано

Из выше перечисленного следует следующая реализация единиц ресурсов:



Поставщики (реализованные ресурсы)

Потребители, которые получают от соответствующего поставщика ресурсы

а1 – 100%

b1

а2 – 100%

b1, b2, b4

а3 – 74,22%

b3, b4



Из приведенной таблицы видно, что два первых поставщика (а1 и а2) полностью реализуют поставки выделенных ресурсов. У третьего поставщика (а3) в наличии еще 25,77% единиц не реализованной продукции.



Общая стоимость:



С() = 38*10 + 4*16 + 35*14 + 6*25 + 63*22 + 9*30 = 380 + 64 + 490 + 150 + 1386 + 270 = 2740






9. Вывод



По окончанию данной работы я могу сказать, что данная работа была для меня как интересной, так и полезной. Благодаря ней я лучше научилась разбираться в транспортных задачах, в потоках и сетях. Сама задача мне не показалась достаточно сложной, при ее выполнение особых проблем не возникало. Также в данном курсе нас познакомили с такой средой как MathCad. Одной из главных задач данной работы было решение и сравнение транспортной задачи вручную и в среде MathCad. Подводя итоги данной работы, я убедилась, что задача была решена, верно, так как решение совпадает. Но стоит сказать, что решение данной задачи вручную мне понравилось гораздо больше, так как здесь пришлось анализировать различные факторы при нахождении минимального пути. Я надеюсь, что данная работа помогла мне лучше разобраться в данной теме.