
- •Методичні вказівки
- •1. Опис дисципліни Мета і завдання вивчення дисципліни
- •2. Структура курсової роботи
- •На тему “розробка програмного комплексу по оптимізації вантажних перевезень на транспортної мережі”
- •До виконанні курсової роботи Завдання на курсову роботу
- •Методичні вказівки до виконання курсової роботи
- •Опорний план за методом мінімального вузла
- •Опорний план за методом мінімального вузла
- •Опорний план за методом мінімального вузла
- •Опорний план за методом випадкового
- •Перша ітерація тт
- •Друга ітерація тт
- •Третя ітерація тт
- •Четверта ітерація тт
- •П’ята ітерація тт
- •Шоста ітерація тт
- •Тт після розподілу вантажу у клітинку а3в2
- •Тт після розподілу вантажу у клітинку а1в4
- •Тт після розподілу вантажу у клітинку а2в1
- •Тт після розподілу вантажу у клітинку а1в4
- •Перша ітерація тт
- •Друга ітерація тт
- •Модифікований метод дейкстри (метод new) зведення сітьового представлення перевезень вантажу на тм до табличного виду – тт
- •1. Задача пошуку найкоротшого шляху між двома заданими вершинами
- •2. Задача пошуку найкоротших шляхів між заданими множинами вершин
- •Результуюча матриця найкоротших відстаней
- •Матрично-мережева модель управління перевезеннями вантажів в тс
- •Масив відстаней між сусідніми вузлами тм
- •Матриця транспортних кореспонденцій між всіма вузлами тм
- •Матриця найкоротших відстаней на тм
- •Опорний план перевезень
- •Тт з потенціалами
- •4. Література
- •Варіанти завдань по курсовій роботі
- •Обсяги поставок і замовлень продукції до структур тм з номерами варіантів від 1-го до 15-го
- •Обсяги поставок і замовлень продукції до структур тм з номерами варіантів від 16-го до 30-го
- •Вартість перевезення одиниці вантажу між сусідніми вузлами тм
- •Вантажу методом північна – західного кута
- •Текст процедури побудови опорного плану перевезень вантажу методом північна – східного кута
- •Текст процедури побудови опорного плану перевезень вантажу методом південна – західного кута
- •Текст процедури побудови опорного плану перевезень вантажу методом південна – східного кута
- •Текст процедури побудови опорного плану перевезень
- •Текст процедури побудови опорного плану перевезень
- •Текст процедури побудови опорного плану перевезень
- •Текст процедури побудови опорного плану перевезень
- •Текст процедури побудови опорного плану перевезень
- •Текст процедури побудови опорного плану перевезень
- •Текст процедури побудови опорного плану перевезень
- •Текст процедури побудови опорного плану перевезень
- •Текст програми на мові Delphi, яка реалізує симплексний метод рішення тз
- •Текст процедури на мові Pascal, яка реалізує алгоритм Дейкстри
- •Текст процедури на мові Delphy, яка реалізує метод графів
- •Завдання на курсову роботу студента
Модифікований метод дейкстри (метод new) зведення сітьового представлення перевезень вантажу на тм до табличного виду – тт
При рішенні багатьох практичних задач виникає необхідність представлення відносин між будь якими об'єктами. Орієнтовані і неорієнтовані графи є природною моделлю для таких відносин.
Розглянемо задачу пошуку найкращого маршруту (шляху) на графі (у змісті найкоротшої відстані). Заданий граф G, у якому кожному ребру приписана позитивна вага. Довжина шляху в такій постановці дорівнює сумі довжин ребер, що складають цей шлях. Задача зводиться до відшукання найкоротшого шляху між двома заданими вершинами графа G.
Існує безліч типів задач про найкоротший шлях :між двома заданими вершинами; між заданою вершиною і всіма іншими; між кожною парою вершин у графі; між двома заданими вершинами для шляхів, що проходять через одну чи кілька зазначених вершин; перший, другий, третій і т.д. найкоротші шляхи в графі.
Найбільший інтерес з перерахованих типів представляють перші три, причому перші два з них реалізуються за допомогою різновидів алгоритму Дейкстри, а третій за допомогою алгоритму Флойда.
1. Задача пошуку найкоротшого шляху між двома заданими вершинами
Нехай є орієнтований граф G = (V, Е), у якого всі дуги мають позитивні мітки (вартості дуг), а одна вершина визначена як джерело. Завдання полягає в пошуку вартості найкоротших шляхів від джерела до всіх інших вершин графа G. Ця задача часто називається задачею пошуку найкоротшого шляху з одним джерелом і може показатися, що більш природною задачею буде пошук найкоротшого шляху від джерела до визначеної вершини призначення. Але ця задача в загальному випадку має такий же рівень складності, що і задача пошуку найкоротшого шляху для усіх вершин графа (за винятком того "щасливого" випадку, коли шлях до вершини призначення буде знайдений раніше, чим переглянуті шляхи до усіх вершин графа).
Представимо граф G у виді карти маршрутів рейсових польотів з одного міста в іншій, де кожна вершина відповідає місту, а дуга v —> w - рейсовому маршруту з міста v у місто w. Мітка дуги v —> w - це час польоту з міста v у місто w. При цьому може виникнути припущення, що в даному випадку як модель більше підходить неорієнтований граф, оскільки мітки дуг v —> w і w —> v можуть збігатися. Але фактично в більшості випадків час польоту в протилежних напрямках між двома містами різний. Крім того, допущення про збіг міток дуг v —> w і w —> v принципово не впливає на рішення поставленої задачі.
У цьому випадку рішення задачі перебування найкоротшого шляху з одним джерелом трактується як мінімальний час перельотів між різними містами. Для рішення поставленої задачі будемо використовувати "жадібний" алгоритм, що часто називають алгоритмом Дейкстры (Dijkstra).
Алгоритм будує множину S вершин, для яких найкоротші шляхи від джерела уже відомі. На кожному кроці до множини S додається та з вільних вершин, відстань до який від джерела менше, ніж для інших вершин, що залишились. Якщо вартості всіх дуг позитивні, то можна бути упевненим, що найкоротший шлях від джерела до конкретної вершини проходить тільки через вершини множини S. Назвемо такий шлях особливим. На кожному кроці алгоритму використовується також масив D, у який записуються довжини найкоротших особливих шляхів для кожної вершини. Коли множина S буде містити усі вершини орграфа G, тобто для усіх вершин будуть знайдені "особливі" шляхи, тоді масив D буде містити довжини найкоротших шляхів від джерела до кожної вершини.
Алгоритм
Дейкстри представлений у лістингу 1.
Тут передбачається, що в орграфе G
вершини пронумеровані цілими числами,
тобто ми маємо множину вершин V=
{1, 2, ..., п),
причому
вершина 1 є джерелом. Масив C—
це двовимірний масив вартостей,
де елемент C[i,
j] дорівнює
вартості дуги i
—>
j.
Якщо
дуги i
—>
j
не
існує, то C[i,
j] полягає
рівним
(нескінченності), тобто більшим будь-якої
фактичної вартості дуг. На кожному кроці
D[i]
містить
довжину поточного найкоротшого особливого
шляху до вершини i.
Лістинг 1. Алгоритм Дейкстри
procedure Dijkstra;
begin
(1) S:= {1};
(2) for i:= 2 to n do
(3) D[i]:=C[l, i]; { ініціалізація D }
(4) for i:= 1 to n -1 do
begin
(5) вибір з множини V\S такої вершини w,що значення D[w]
мінімально;
(6) додати w до множини S;
(7) for кожна вершина v з множини V\S do
(8) D[v]:= min(D[v], D([w] + C[w, v] )
end
end; { Dijkstra }
Застосуємо алгоритм Дейкстри для орграфа, показаного на рис. 6.
-
10
100
70
30
50
10
60
Рис. 6. Орграф з позначеними дугами
20
На
початку S = {1}, D[2] = 10, D[3] =
, D[4] = 30 і D[5]
= 100.
На першому кроці циклу (рядки (4) - (8)
лістінге 1) w
= 2, тобто
вершина 2 має мінімальне значення в
масиві D.
Потім
обчислюємо D[3]
= min(
, 10 + 50) = 60; D[4] = min(30, 10 +
)
= 30 і D[5] = min(100,
10 +
)
= 100. Послідовність значень елементів
масиву D після
кожної ітерації циклу показані нижче:
Ітерація S w D[2] D[3] D[4] D[5]
Початок |
{1} |
- |
10 |
|
30 |
100 |
1
|
{1,2}
|
2 |
10 |
60 |
30 |
100 |
2
|
{1, 2, 4}
|
4 |
10 |
50 |
30 |
100 |
3
|
{1, 2, 4, 3}
|
3 |
10 |
50 |
30 |
60 |
4
|
{1, 2, 4, 3, 5}
|
5 |
10 |
50 |
30 |
60 |
Примітка: затемненими показані найкоротші відстані від 1-ої вершини до кожної з вершин, котрі вже знаходяться у множині S
Нескладно
внести зміни в алгоритм так, щоб можна
було визначити сам найкоротший шлях
(тобто послідовність вершин) для будь-якої
вершини. Для цього треба
ввести ще один масив Р
вершин,
де P[v]
містить
вершину, що безпосередньо передує
вершині v у
найкоротшому
шляху. Спочатку покладемо Р[v]
= 1 для всіх v
1. У лістингу
1 після рядка (7) треба записати умовний
оператор з умовою D[w]
+ C[w,
v] < D[v], при
виконанні якого елементу P[v]
привласнюється
значення w.
Після
виконання алгоритму найкоротший шлях
до кожної вершини можна знайти за
допомогою зворотного проходження по
попереднім вершинах масиву Р.
Наприклад, для орграфа з рис. 6 масив Р має наступні значення: Р[2] = 1, Р[3] = 4, Р[4] = 1 і Р[5] = 3 . Для визначення найкоротшого шляху, наприклад від вершини 1 до вершини 5, треба відстежити в зворотному порядку попередні вершини, починаючи з вершини 5. На підставі значень масиву Р визначаємо, що вершині 5 передує вершина 3, а вершині 3 - вершина 4, а їй, у свою чергу, - вершина 1. Таким чином, найкоротший шлях з вершини 1 у вершину 5 складає наступна послідовність вершин: 1, 4, 3, 5. ( У додатку 17 наведений текст програми на мові Pascal, який реалізує алгоритм Дейкстри).