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

5.2. Алгоритми прямої і зворотньої прогонки.

У прикладі 5.1. обчислення виконувалися послідовно: від першого етапу до третього. Така послідовність обчислень дістала назву алгоритму прямої прогонки. Цей же приклад може бути розв’язаний і за алгоритмом зворотньої прогонки, у відповідності до якого обчислення виконуються у зворотньому порядку: від третього етапу до першого.

Алгоритми прямої та зворотньої прогонки приводять до єдиного результату. Хоча більш логічним є алгоритм прямої прогонки, у спеціальній літературі з динамічного програмування, перевага надається алгоритму зворотньої прогонки, як більш ефективному щодо обчислювальних процедур. Розглянемо алгоритм зворотньої прогонки, використавши умову задачі з прикладу 5.1. Обчисленння приведемо в компактних таблицях.

Приклад 5.2. За умовою задачі 5.1. визначити найкоротшу відстань між пунктами 1→7, застосувуючи алгоритм зворотньої прогонки.

Розв’язок.

Рекурентне співвідношення для алгоритму зворотньої прогонки має вигляд:

Fi(xi) = (5.2)

де F4(x4) = 0, для x4 = 7. відповідною послідовністю обчислень буде F3F2 F1.

Функції типу (5.1), (5.2) прийнято називати функціями Беллмана для алгоритмів прямої та зворотньої прогонки.

ІІІ етап. Так як пункт 7 пов’язаний з пунктами 5 і 6 одним маршрутом, альтернативи для вибору відсутні, тоді результат третього етапу можна записати у вигляді таблиці:

x3

d(x3,x4)

Оптимальний розв’язок

x4

F3(x3)

x4*

5

9

9

7

6

6

6

7

ІІ етап. Так як маршруту (2→6) не існує, відповідна альтернатива не розглядається. Використовуючи значеня f3(x3), попереднього етапу, можна порівняти допустимі альтернативні рішення, як показано в таблиці:

x2

d(x2,x3) + F3(x3)

Оптимальний розв’язок

x3 = 5

x3 = 6

F2(x2)

x3*

2

12 + 9 = 21

-

21

5

3

8 + 9 = 17

9 + 6 = 15

15

6

4

7 + 9 = 16

13 + 6 = 19

16

5

Зміст оптимальноро розв’язку другого етапу наступний. Якщо ви знаходитесь в пункті 2 або 4, то найкоротший шлях до пункту 7 проходить через пункт 5, якщо в пункті 3, то найкоротший шлях до пункту 7 проходить через пункт 6.

І етап. Із пункту 1 маємо три альтернативні маршрути: (1→2), (1→3), (1→4). Використовуючи значення функції F2(x2), попереднього етапу, обчислюємо значення даних наступної таблиці:

x1

d(x1,x2) + F2(x2)

Оптимальний розв’язок

x2 = 2

x2 = 3

x2 = 4

F1(x1)

x2*

1

7 + 21 = 28

8 + 15 = 23

5 + 16 = 21

21

4

У відповідності до оптимального роз’язку на першому етапі, найкоротший шлях проходить через пункт 4, далі із розрахунків на другому етапі випливає, що із пункту 4 маршрут проходить через пункт 5. Нарешті, із оптимального розв’язку на третьому етапі слідує, що пункт 5 пов’язаний із пунктом 7. таким чином, маршрутом мінімальної довжини буде 1→4→5→7, його довжина дорівнює 21 одиниці.

Загалом, обчислювальний алгоритм динамічного програмування можна будувати на мережах, або за алгоритмами прямої чи зворотньої прогонки. Побудова моделі динамічного програмування передбачає визначення трьох основних складових елементів:

1. визначення етапів (кроків) управління;

2. визначення на кожному етапі віріантів рішення – альтернатив;

3. визначення станів на кожному етапі.

Найбільш складним для сприйняття є поняття стану. Як правило, поняття стану змінюється в залежності від модельованої ситуації і корректне визначення стану є запорукою успіху при розв’язанні задач динамічного програмування.

Якщо вважати усі кроки-етапи розв’язку задачі динамічного програмування незалежними, тоді оптимальним управлінням буде те управління, яке забеспечує максимальний виграш саме на цьому кроці. Але при виборі крокового управління необхідно враховувати наступні вимоги:

1) можливі результати попереднього кроку;

2) вплив управління на кожному кроці на усі наступні кроки які залишилися до кінці процесу.

У задачах динамічного програмування першу вимогу враховують, роблячи на кожному кроці умовні припущення про можливі варіанти закінчення попереднього кроку і виконуючи для кожного кроку умовну оптимізацію. Виконання другої вимоги забеспечується проведенням безумовної оптимізації з кінці процесу управління до початку.

Умовна оптимізація. На першому етапі розв’язку задачі, який називається умовною оптимізацією, визначаються функції Беллмана і оптимальне управління для усіх можливих станів на кожному кроці, починаючи з останнього у відповідності до алгоритму зворотньої прогонки. На останньому, n-му кроці оптимальне управління – xn* визначається функцією Беллмана: F(S) =max{Wn(S,xn)}, у відповідності до якої максимум обирається з усіх можливих значень xn , причому xn є Х, де Х - область усіх можливих покрокових управлінь системи.

Подальше обчислення виконується у відповідності до рекурентного співвідношення, яке пов’язує функцію Беллмана на кожному кроці з функцією Беллмана обчисленою на попередньому кроці. Загальний вигляд рекурентного співідношення такий:

Fn(S) = max {Wn(S,xn) + Fk+1(S1(S,xk))}, xk є X. (5.4)

Цей максимум (або мінімум) визначається для усіх можливих для k і S значенням змінної управління х.

Безумовна оптимізація. Після того, як функція Беллмана і відповідні оптимальні управління знайдені для усіх кроків з n по перший , здійснюється другий етап розв’язку задачі, названий безумовною оптимізацією. Користуючись тим, що на першому кроці (k=1) стан системи відомий – це її початковий стан S0, можна знайти оптимальний результат для усіх n кроків і оптимальне управління на першому кроці х1, яке здійснює цей результат. Після застосування цього управління система перейде у інший стан S1(S,x1*), знаючи який, можна, користуючись результатами умовної оптимізації, знайти оптимальне управління на другому кроці x2*, і так далі до останнього n –кроку.

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