Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга_3.doc
Скачиваний:
7
Добавлен:
05.05.2019
Размер:
278.02 Кб
Скачать

Розділ 3 алгоритми рішення сітьовИх задач

    1. Основні положення

    1. Найкоротший маршрут на ациклічній мережі

    2. Mаксимальний потік у мережі з обмеженими пропускними здатностями

    3. Рішення задачі про призначення

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 проставлені в квадратах у кожного кута, а дуги, що належать найкоротшим шляхам, виділені жирними лініями.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]