
Розділ 3 алгоритми рішення сітьовИх задач
Основні положення
Найкоротший маршрут на ациклічній мережі
Mаксимальний потік у мережі з обмеженими пропускними здатностями
Рішення задачі про призначення
3.1. Основні положення
Почнемо з обговорення класичної транспортної моделі, тобто з наступної задачі лінійного програмування:
мінімізувати
(3.1)
при обмеженнях
,
i
= 1, 2, …, m (3.2)
,
j
= 1, 2, …, n, (3.3)
при всіх i
та j, (3.4)
де всі Si та Di – ненегативні цілі числа, що задовольняють умові
(загальні
постачання
= загальний
попит). (3.5)
Користуючись досить простими прийомами, можна перетворити численні оптимізаційні задачі на мережах в еквівалентну класичну транспортну задачу.
Якщо врахувати співвідношення (3.2), (3.3) і (3.5), то буде очевидним, що модель містить надлишкове обмеження: якщо будь-які m + n – 1 обмежень (3.2) і (3.3) задовольняються, то обмеження, що залишилося, також задовольняється. [Це можна строго показати, помноживши кожне з обмежень (33.) на –1, а потім склавши будь-які m + n – 1 обмежень і використовуючи умову (3.5) для спрощення констант у правій частині. Одержуване у підсумку рівняння тотожне обмеженню, що залишилося.] Отже, кожне з рівнянь попиту і постачань (3.2) або (3.3) можна без вагань опустити. У підсумку маємо модель, що містить m + n – 1 незалежних обмежень, внаслідок чого у будь-яке базисне рішення входить саме таке число базисних перемінних.
Легко показати, що відповідна двоїста задача лінійного програмування записується так:
максимізувати
(3.6)
при
обмеженнях
за
усіх (i,
j), (3.7)
де величини vi і wi не обмежені за знаком.
Відшукуються найкоротші маршрути з усіх вузлів у кінцевий вузол r. Зокрема, для визначення найкоротшого шляху для будь-якого вузла s знаходять дугу (s, t), для якої ys – yt = cst. Алгоритм гарантує, що є принаймні одна така дуга. Аналогічно у вузлі t знаходять дугу (t, u), таку, що уt – уu = сtu. Продовжуючи рухатися по мережі подібним чином, знаходять маршрут, що приводить у кінцевому рахунку у вузол r. Відзначимо, що значення yk дорівнює довжині найкоротшого маршруту з вузла k у вузол r. Хоча кожне значення уk визначене однозначно, з вузла k може розпочинатися більш одного найкоротшого маршруту.
Приклад. Алгоритм ілюструється на прикладі мережі, приведеної на рис. 3.1. Це та ж мережа, що була показана на рис. 2.2. Будемо відшукувати найкоротші шляхи у вузол 1 з усіх інших вузлів. Наочніше всього роботу алгоритму можна простежити, виконуючи обчислення безпосередньо на мережі. Змалюйте мережу, показану на рис. 3.1, на окремий лист або робіть записи олівцем прямо на кресленні у книзі.
Кінцевий пункт
Рис. 3.1. Приклад задачі про найкоротший маршрут
Почнемо обчислення, проставивши 0 біля вузла 1 та символ ∞ біля всіх інших вузлів. Можна виконувати обчислення у різному порядку. Один з них є таким:
с41 + у1 = 2 + 0 < ∞ = y4, тому приймемо y4 = 2,
з34 + у4 = 1 + 2 < ∞ = y3, тому приймемо y3 = 3,
з64 + у4 = 5 + 2 < ∞ = y6, тому приймемо y6 = 7,
с54 + у4 = 1 + 2 < ∞ = y5, тому приймемо y5 = 3,
з65 + у5 = 3 + 3 < 7 = y6, тому приймемо y6 = 6,
з85 + у5 = 6 + 3 < ∞ = y8, тому приймемо y8 = 9, (3.8)
с23 + у3 = 3 + 3 < ∞ = y2, тому приймемо y2 = 6,
з73 + у3 = 5 + 3 < ∞ = y7, тому приймемо y7 = 8,
з72 + у2 = 1 + 6 < 8 = y7, тому приймемо y7 = 7,
с87 + у7 = 1 + 7 < 9 = y8, тому приймемо y8 = 8.
При обчисленні нового значення кожної величини yk по формулах (3.8) потрібно обов’язково проставляти знайдене значення у вузла k на рисунку. Маємо
у1 = 0, у2 = 6, у3 = 3, у4 = 2,
у5 = 3, у6 = 6, у7 = 7, у8 = 8. (3.9)
Необхідно обов’язково переконатися в тому, що значення перемінних у (3.9) тепер задовольняють умові
для всіх дуг мережі. Тоді обчислення закінчуються. На мал. 3.2 значення уk проставлені в квадратах у кожного кута, а дуги, що належать найкоротшим шляхам, виділені жирними лініями.