- •Міністерство освіти і науки україни національний транспортний університет Дослідження операцій в моделюванні управлінських рішень
- •Isbn 978-966-632-185-8
- •I. Предмет і завдання дослідження операцій
- •1.1. Що таке дослідження операцій
- •1.2. Основні поняття та принципи дослідження операцій
- •1. 3. Математичні моделі операцій
- •1.4. Багатокритеріальні задачі дослідження операцій
- •1.5. Системний підхід до задач дослідження операцій
- •1.6. Типові класи задач дослідження операцій
- •1. Задачі управління запасами
- •2. Задачі розподілу ресурсів
- •3. Задачі ремонту і заміни обладнання
- •4. Задачі масового обслуговування
- •5. Задачі впорядкування
- •6. Задачі сітьового планування і управління (спу)
- •7. Задачі вибору маршруту (сітьові задачі на транспорті)
- •8. Комбіновані задачі
- •II. Класифікація методів оптимізації
- •2.1. Математичне формулювання загальної задачі оптимізації
- •2.2. Геометрична інтерпретація задач оптимізації
- •2.3. Класифікація методів оптимізації по виду цільової функції
- •2.4. Характеристика градієнтних методів пошуку екстремуму
- •III. Лінійне програмування
- •3.1. Задачі лінійного програмування
- •3.2. Основна задача лінійного програмування
- •3.3. Транспортна задача лінійного програмування
- •IV. Динамічне програмування
- •4.1. Метод динамічного програмування
- •4.2. Приклади розв’язання задач динамічного програмування
- •4.3. Завдання динамічного програмування в загальному вигляді. Принцип оптимальності
- •V. Елементи теорії масового обслуговування
- •5.1. Основні поняття теорії масового обслуговування
- •5.2. Класифікація систем масового обслуговування
- •5.3. Основні елементи систем масового обслуговування
- •5.4. Параметри смо і загальна методика дослідження
- •5.5. Системи масового обслуговування з відмовами
- •5.6. Кількісні показники смо з відмовами
- •5.7. Короткий опис основних типів пуассонівських смо
- •5.7.1. Смо з відмовами:
- •5.7.2. Смо з очікуванням і обмеженим потоком заявок
- •5.7.3. Смо змішаного типу з обмеженням по довжині черги
- •5.7.4. Смо змішаного типу з обмеженням за часом перебування заявки в черзі і на обслуговуванні
- •5.7.5. Приклади розв’язку задач тмо
- •VI. Теорія ігор
- •6.1. Ігрові моделі прийняття рішень
- •6.2. Прямокутні матричні ігри
- •6.3. Аналіз матричних ігр
- •6.4. Елементарні методи розв’язку ігор
- •6.4.1. Загальна схема розв’язання
- •6.4.2. Методи розв’язку гри 2 X 2
- •6.4.3. Методи розв’язання ігор 2хn
- •Ордината точки n дорівнює ціні гри ν, а абсциса дорівнює частоті застосування стратегії а1.
- •Аналітичний метод розв’язання гри 2хn
- •6.5. Загальний розв’язок гри m X n методом лінійного програмування
- •6.6. Наближені методи розв’язання матричних ігр
- •6.7. Приклади розв’язання задач теорії ігор
- •VII. Моделювання на пк
- •7.1. Поняття моделі і моделювання
- •7.2. Метод статистичних випробувань
- •7.3. Імітація випадкових впливів на пк
- •7. 4. Методи формування в пк базових впливів
- •7.5. Оцінка точності характеристик, отриманих методом статистичних випробувань. Необхідна кількість реалізацій
- •7.6. Приклади розв’язку задач методом статистичних випробувань
- •VIII. Метод cітьового планування
- •8.1. Поняття про сітьове планування та управління
- •8.2. Основні визначення
- •8.3. Основні елементи сітьового графіка
- •8.4. Правила побудови сітьового графіка
- •8.5. Часові параметри сітьових графіків
- •8.6. Способи розрахунку сітьових графіків
- •8.7. Оптимізація сітьових графіків
- •8.8. Імовірнісні тимчасові оцінки сітьових моделей
- •8.9. Укрупнення сітьових моделей
- •8.10. Зшивання сітьових моделей
- •Література
- •Для нотаток
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 зміни стану не залежали від номера кроку.
Питання для самоперевірки:
Особливість методу динамічного програмування.
Математична постановка задачи динамічного програмування.
Формалізація задачи планування діяльності групи промислових підприємств
на
період m
господарських років.
Що визначає умовні оптимальні управління та умовні оптимальні виграші.
Сформулюйте задачу проведення найвигіднішого шляху між двома пунктами.
Що визначають умовні оптимальні управління та умовні оптимальні виграші в задачі прокладкі найвигіднішого шляху між двома пунктами.
Математична модель задачі про розподіл ресурсів.
Сформулюйте принцип оптимальності задачі динамічного програмування.
Дайте математичний опис задачі динамічного програмування в загальному вигляді.
