Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Оптимізаційны методи та моделі.doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
5.7 Mб
Скачать

4.3. Завдання динамічного програмування в загальному вигляді. Принцип оптимальності

Розглянуті вище найпростіші задачі динамічного програмування дають поняття про загальну ідею методу: покрокова оптимізація, що проходить в одному напрямку «умовно», в іншому — «безумовно». Метод динамічного програмування є дуже потужним і плідним методом оптимізації управління, і йому не страшні ні цілочисельні рішення, ні нелінійність цільової функції, ні вид обмежень, накладених на рішення. Але на відміну від лінійного програмування динамічне програмування не зводиться до будь-якої стандартної обчислювальної процедури; воно може бути передано на машину тільки після того, як записані відповідні формули, а це часто буває не так-то легко.

У цьому параграфі ми дамо щось на кшталт «зведення порад початківцям» — як ставити задачі динамічного програмування, в якому порядку їх вирішувати, як записувати і т. п.

Перше питання, на яке потрібно відповісти тому, хто дає завдання: якими параметрами характеризується стан керованої системи S перед кожним кроком? Від вдалого вибору набору цих параметрів часто залежить можливість успішно вирішити завдання оптимізації. У трьох конкретних прикладах, які ми вирішували в попередньому параграфі, стан системи характеризувався дуже невеликим числом параметрів: двома координатами — у першому прикладі, одним числом — у другому і третьому. Але такі ультрапрості завдання не так вже часто зустрічаються на практиці. Якщо, як це зазвичай і буває, стан системи описується багатьма параметрами (так званими «фазовими координатами»), то стає важко перед кожним кроком перебрати всі їх варіанти і для кожного знайти оптимальне умовне управління. Останнє ще більше ускладнюється в разі, коли число можливих варіантів управління велике. У цих випадках над нами повисає, за влучним висловом Р. Белмана, «прокляття багатомірності» — бич не тільки методу динамічного програмування, але і всіх інших методів оптимізації. Зазвичай задачі динамічного програмування вирішуються не вручну, а на ЕОМ, проте багато таких завдань не під силу навіть сучасним машинам. Тому дуже важливо вміти правильно і «скромно» поставити завдання, не переобтяжуючи її зайвими подробицями, спрощуючи наскільки можливо опис керованої системи та варіантів управління. Так що в методі динамічного програмування дуже багато що залежить від мистецтва і досвіду дослідника.

Друге завдання після опису системи та переліку управлінь — це членування на кроки (етапи). Іноді (на щастя) воно буває задано в самій постановці завдання (наприклад, господарські роки в економічних задачах), але часто членування на кроки доводиться вводити штучно. Якщо б ми в цьому завданні не обмежилися найбільш примітивним випадком всього двох управлінь («с» і «в»), то було б зручніше членування на кроки зробити інакше, наприклад, вважаючи за «крок» перехід з однієї прямої, паралельної осі ординат, на іншу. Можна було б замість прямих розглянути кола з центром у точці А чи ж інші криві. Всі такі способи вибору найвигіднішого шляху неминуче обмежують вибір можливих напрямів. Якщо за «кроки» вважати переходи з однієї прямої, паралельної осі ординат, на іншу, то тут безліч можливих управлінь не передбачає «шляху назад», тобто з більш східної прямої на більш західну. У більшості завдань практики такі обмеження природні (наприклад, важко собі уявити, щоб найвигідніша траєкторія космічної ракети, пущеної з Землі, на якихось ділянках включала рух «назад», ближче до Землі). Але буває й інша обстановка. Наприклад, шлях по сильно пересіченій місцевості («серпантинна» дорога в горах) часто «кривляє» і повертається ближче до вихідного пункту. При постановці задачі динамічного програмування, зокрема при виборі системи координат і способу членування на кроки, повинні бути враховані всі розумні обмеження, що накладаються на управління.

Як бути з числом кроків m? З першого погляду може здатися, що чим більше m, тим краще. Це не зовсім так. При збільшенні m зростає обсяг розрахунків, а це не завжди виправдано. Число кроків потрібно вибирати з урахуванням двох обставин: 1) крок повинен бути досить дрібним для того, щоб процедура оптимізації крокового управління була досить проста, і 2) крок повинен бути не дуже дрібним, щоб не виробляти непотрібних розрахунків, які тільки ускладнюють процедуру пошуку оптимального рішення, але не призводять до істотної зміни оптимуму цільової функції. У будь-якому випадку практики нас цікавить не строго оптимальне, а «прийнятне» рішення, що не надто відрізняється від оптимального за значенням виграшу W*.

Сформулюємо загальний принцип, що лежить в основі рішення всіх задач динамічного програмування (його часто називають «принципом оптимальності»):

Яким би не був стан системи S перед черговим кроком, треба вибирати управління на цьому кроці так, щоб виграш на даному кроці плюс оптимальний виграш на всіх наступних кроках був максимальним.

Здається, повне розуміння цього принципу робиться можливим (для осіб зі звичайним математичним розвитком) тільки після розгляду ряду прикладів, тому ми й наводимо цей основний принцип не на початку глави (як це було б природно для математика), а лише після рішення низки прикладів.

А тепер сформулюємо кілька практичних рекомендацій, корисних починаючому при постановці завдань динамічного програмування. Цю постановку зручно проводити в наступному порядку.

1. Вибрати параметри (фазові координати), що характеризують стан S керованої системи перед кожним кроком.

2. Розчленувати операцію на етапи (кроки).

3. З’ясувати набір крокових управлінь хi для кожного кроку і покладені на них обмеження.

4. Визначити, який виграш приносить на i-му кроці управління хi, якщо перед цим система була в стані S, тобто записати «функції виграшу»:

(4.17)

5. Визначити, як змінюється стан системи S під впливом управління xi на i-му кроці: воно переходить у новий стан

(4.18)

«Функції зміни стану» (4.18) теж повинні бути записаний.

6. Записати основне рекурентне рівняння динамічного програмування, що виражає умовний оптимальний виграш Wi(S) (починаючи з i-го кроку і до кінця) через вже відому функцію Wi+1 (S):

(4.19)

Цьому виграшу відповідає умовне оптимальне керування на i-му кроці xi (S) (підкреслимо, що у вже відому функцію Wi+1(S) треба замість S підставити змінений стан S‘= φі (S, xі)).

7. Провести умовну оптимізацію останнього (m-го) кроку, задаючись гамою станів S, з яких можна за один

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

(4.20)

і знаходячи умовне оптимальне керування xm(S), для якого цей максимум досягається.

8. Провести умовну оптимізацію (m – 1)-го, (m – 2)-го і т.д. кроків за формулою (8.19), вважаючи в ній i = (m – 1), (m – 2),..., і для кожного з кроків вказати умовне оптимальне керування xi(S), при якому максимум досягається.

Зауважимо, що якщо стан системи в початковий момент відомо (а це зазвичай буває так), то на першому кроці варіювати стан системи не потрібно — прямо знаходимо оптимальний виграш для даного початкового стану S0. Це і є оптимальний виграш за всю операцію:

.

9. Провести безумовну оптимізацію управління, «читаючи» відповідні рекомендації на кожному кроці. Взяти знайдене оптимальне управління на першому кроці х1* = x1 (S0); змінити стан системи за формулою (8.18); для знову знайденого стану знайти оптимальне керування на другому кроці x2* і т.д. до кінця. Зауважимо, що аргументи функцій (4.17), (4.18) в загальному випадку — не числа, а сукупності чисел (вектори).

Зробимо кілька додаткових зауважень загального характеру. До цих пір ми розглядали тільки адитивні задачі динамічного програмування, в яких виграш за всю операцію дорівнює сумі виграшів на окремих кроках. Але метод динамічного програмування застосуємо також і до задач з так званим «мультиплікативним» критерієм, що має вигляд добутку:

(4.21)

(Якщо тільки виграші wi позитивні). Ці задачі вирішуються так само, як завдання з адитивним критерієм, з тією єдиною різницею, що в основному рівнянні (8.19) замість знака «плюс» ставиться знак множення х:

(4.22)

На закінчення — кілька слів про так звані «безкінечнокрокові» задачі динамічного програмування. На практиці зустрічаються випадки, коли планувати операцію доводиться не на чітко визначений, а на невизначено довгий проміжок часу, і нас може цікавити рішення задачі оптимального управління безвідносно до того, на якому саме кроці операція закінчується. У таких випадках буває зручно розглянути в якості моделі явища безкінечнокроковий керований процес, де не існує «особливого» в порівнянні з іншими останнього кроку (всі кроки рівноправні). Для цього, зрозуміло, потрібно, щоб функції fi виграшу і функції φi зміни стану не залежали від номера кроку.

Питання для самоперевірки:

  1. Особливість методу динамічного програмування.

  2. Математична постановка задачи динамічного програмування.

  3. Формалізація задачи планування діяльності групи промислових підприємств на період m господарських років.

  4. Що визначає умовні оптимальні управління та умовні оптимальні виграші.

  5. Сформулюйте задачу проведення найвигіднішого шляху між двома пунктами.

  6. Що визначають умовні оптимальні управління та умовні оптимальні виграші в задачі прокладкі найвигіднішого шляху між двома пунктами.

  7. Математична модель задачі про розподіл ресурсів.

  8. Сформулюйте принцип оптимальності задачі динамічного програмування.

  9. Дайте математичний опис задачі динамічного програмування в загальному вигляді.