- •Тема 3. Задачі динамічного програмування.
- •Задача розподілу коштів
- •Рекурсивні алгоритми
- •Теорія ігор
- •Принцип мінімаксу в парній грі з нульовою сумою
- •Приклад 2. Проаналізуємо задачу, наведену в прикладі 1.
- •Гра 2х2 без сідлових точок
- •Спрощення ігор
- •Розв'язання ігор
- •Зведення матричної гри до задачі лінійного програмування
- •Системи масового обслуговування
- •Моделювання вхідного потоку замовлень
- •Система з паралельними обслуговуючими пристроями та обмеженою чергою
Тема 3. Задачі динамічного програмування.
Динамічне програмування – це математичний метод оптимізації рішень, які приймаються в ході багато етапного процесу з метою оптимізації значення результуючої змінної за весь період управління. Для реалізації цієї мети, управління на кожному кроці повинно враховувати всі наслідки прийнятого рішення для майбутніх періодів. При цьому прийняття рішення на останньому кроці буде найпростішим, оскільки відпаде необхідність враховувати наслідки дій в майбутньому. На цьому кроці можна вибрати оптимальне управління виходячи з умов кроку. Тому процес динамічного програмування починається з останнього етапу і розгортається до першого.
Однак, щоби прийняти рішення на останньому етапі (m) потрібно знати результат попереднього етапу (m-1). Оскільки його немає, то потрібно зробити різні допущення щодо стану S процесу управління після завершення попереднього кроку і при кожному із можливих станів вибрати оптимальне управління останнього етапу. Розв'язавши цю задачу, ми знайдемо умовно оптимальне управління на m-тому кроці, тобто управління, яке дозволить прийняти оптимальне рішення при будь-якому можливому стані системи на попередньому кроці.
Нехай умовно-оптимальне управління кроку m побудовано. Робимо всеможливі допущення про стан системи після (m-2) кроку і для кожного з них знаходимо таке управління на (m-1) кроці, щоби виграш за останні два кроки був максимальним. Таким чином знаходимо умовно-оптимальне управління для кроку (m-1). Продовжуємо процес, аж до побудови умовно-оптимального управління для першого кроку. Після цього ми можемо знайти оптимальне управління всього процесу.
Оскільки нам відомий стан процесу S0 перед його плануванням, то проходячи по кожному етапу від першого до m-го згідно умовно оптимальних управлінь будемо визначати реальні стани оптимального процесу в цілому а також оптимальні управління кожного етапу, які і складуть оптимальне управління всім процесом.
Таким чином в процесі оптимізації управління методом динамічного програмування багатокроковий процес проходиться двічі:
перший раз – від кінця до початку, в результаті чого знаходяться умовні оптимальні управління та виграші кожного етапу;
другий раз – від початку до кінця, в результаті чого знаходяться вже дійсні оптимальні управління кожного етапу.
Принцип Беллмана та основне функціональне рівняння динамічного програмування.
В основу поетапної процедури побудови оптимального управління лежить принцип Беллмана:
- яким би не був стан системи S системи в результаті певної кількості кроків, управління на найближчому кроці повинно вибиратися так, щоби воно в сукупності з оптимальним управлінням на всіх наступних кроках, приводило до максимального виграшу на всіх наступних кроках, включаючи даний.
Позначимо через
умовний
оптимальний виграш, який отримується
на всіх наступних кроках починаючи від
і-го до останнього. Він
рівний максимальному виграшу, який
можна отримати на всіх цих кроках разом,
якщо перед і-м кроком система перебувала
в стані Sі-1.
Вважаємо, що цей виграш
досягається за допомогою
умовно-оптимального управління
.
Нехай ми вибираємо довільне
управління
на
і-му кроці. При цьому ми отримуємо деякий
виграш
(3.1)
який залежить як від стану системи, так і від вибраного управління. Крім того ми отримаємо деякий виграш на наступних кроках. Згідно принципу оптимальності будемо вважати, що він максимальний. Щоби знайти цей виграш ми повинні знати стан системи перед наступним і+1-им кроком. Цей новий стан буде залежати від стану системи Si-1 та проведеного управління Ui
(3.2)
Виграш, який ми таким чином отримаємо на кроці і буде складати
(3.3)
Однак згідно принципу оптимальності ми повинні вибрати таке управління Ui, при якому величина виграшу на даному кроці буде максимальна
(3.4)
Управління
,
при якому досягається цей максимум буде
умовно-оптимальним управлінням на
даному кроці
(3.5)
а рівняння (3.4) називається основним функціональним рівнянням динамічного програмування. Вона дозволяє встановити умовний оптимальний виграш на кроці і, коли цей виграш відомий для кроку і+1. Для останнього кроку потрібно просто максимізувати виграш при всіх допустимих станах системи перед останнім етапом :
(3.6)
Якщо в умові задачі задається
область кінцевих станів Se,
то оптимізація проводиться не по всіх
можливих управліннях
,
а лише по тих управліннях
,
які приводять систему в область Se
(3.7)
Знаючи умовно оптимальне
управління (3.6) на останньому кроці
можемо за основним функціональним
рівнянням динамічного програмування
(3.4) знайти всі умовно-оптимальні виграші
та умовно-оптимальні управління до
першого кроку
та
. Оскільки дійсний початковий стан
системи
відомий,
то можемо знайти оптимальний виграш
при управлінні даною системою
(3.8)
а також побудувати ланцюжок,
(3.9)
який визначатиме це оптимальне управління:
(3.10)
