- •З дисципліни
- •1 Змістовий модуль 1. Лінійне та нелінійне програмування
- •Тема 1 «Введення в дисципліну. Побудова математичних моделей проблемних ситуацій»
- •1. Загальна методологія дослідження операцій
- •2. Модель операції, основні принципи її побудови
- •3. Методика проведення дослідження операцій
- •4. Типові класи задач дослідження операцій
- •Тема 2 «Задачі математичного програмування (мп)»
- •1. Загальна постановка задачі математичного програмування (мп)
- •2. Класифікація задач мп
- •3. Типи максимумів. Теорема Вейєрштрасса та теореми про достатні умови глобального максимуму
- •4. Специфіка задач математичного програмування
- •Тема 3 «Лінійне програмування»
- •1. Загальна постановка задачі лінійного програмування (злп)
- •2. Форми запису злп (загальна, стандартна, канонічна форми)
- •Приклади практичних задач лінійного програмування
- •Тема 4 «Геометрична інтерпретація злп»
- •1. Графічний метод розв'язання злп. Умови графічного розв'язання злп.
- •2. З’ясування основних особливостей та властивостей розв’язків злп за допомогою геометричної інтерпретації.
- •3. Основні етапи графічного розв'язання злп (Алгоритм геометричної інтерпретації злп)
- •Тема 5 «Симплексний метод розв'язування злп»
- •1. Аналітичні методи розв'язування злп
- •2. Ідея симплексного методу розв'язування злп
- •3. Основні теореми, на яких базується симплексний метод
- •4. Симплекс-алгоритм розв'язування невироджених злп
- •Тема 6 «злп з штучним базисом»
- •1. Ідея симплексного методу розв'язування злп із штучною базою
- •3. Алгоритм розв'язання злп із штучною базою
- •Тема 7 «Двоїстість. Двоїстість (спряженість) у лінійному програмуванні»
- •1. Поняття двоїстості в лінійному програмуванні
- •2. Основні теореми двоїстості та їх економічний зміст
- •Тема 8 «Спеціальні задачі мп. Спеціальні методи розв’язання злп»
- •Транспортна задача ( т-Задача) та її математична модель.
- •2. Методи визначення опорного плану т-Задачі
- •3. Методи розв’язання т-задач
- •Розв'язання т-задач методом потенціалів
- •Тема 9 «Параметричне програмування»
- •2. Моделі задач параметричного програмування
- •Тема 10 «Нелінійне програмування»
- •1. Загальна постановка задачі нелінійного програмування
- •2. Класичні умови екстремуму. Метод множників Лагранжа
- •4. Задача нелінійного програмування й сідлова точка
- •5. Умови Куна-Таккера для знп. Теорема Куна-Таккера
- •2 Змістовий модуль 2. Дискретне та стохастичне програмування
- •Тема 1 «Дискретне програмування»
- •1. Загальні характеристика дискретних задач
- •2. Класифікація задач дискретного програмування. Математичні моделі задач дискретного програмування
- •1. Як у загальному виді надається задача дискретного програмування?
- •Тема 2 «Клас цілочислових лінійних задач»
- •Особливості задач цілочисельне програмування. Моделі цзлп
- •Моделі цзлп
- •2. Метод відсікань (метод Гоморі) розв'язання зцлп
- •3.Комбінаторні методи розв’язування цзлп
- •4. Метод гілок та меж в задачах цілочислового програмування. Ідея методу гілок і меж, ознака оптимальності плану
- •Тема 3 «Динамічне програмування»
- •1. Загальна структура задач динамічного програмування
- •2. Принципи динамічного програмування. Принцип оптимальності Беллмана
- •3. Приклади задач динамічного програмування
- •Тема 4 «Стохастичне програмування»
- •1. Загальна характеристика задач стохастичного програмування. Методи розв’язання задач стохастичного програмування.
- •2. Приклади задач стохастичного програмування
- •3 Змістовий модуль 3. Методи оптимізації
- •Тема 1 «Методи оптимізації функцій, що диференціюються та що не диференціюються»
- •Тема 2 «Методи оптимізації в задачах великої розмірності та методи багатокритеріальної оптимізації»
- •1. Методи оптимізації багатовимірних задач
- •Градієнтні методи
- •Найшвидший підйом з використанням одномірного пошуку
- •Метод найшвидшого спуску
- •Метод Флетчера – Рівса
- •Метод Девідона – Флетчера – Пауела
- •Метод конфігурацій Хука – Дживса
- •Метод конфігурацій Розенброка
- •4 Навчально–методичні матеріали з дисципліни
3. Приклади задач динамічного програмування
Задача про наймання працівників.
Приступимося до розгляду питань застосування методів динамічного програмування в конкретних економіко-математичних моделях. Окремо відзначимо, що дані обчислювальні схеми, загалом кажучи, досить часто використовуються для рішення деяких задач. Це, насамперед, задача про ранець, задача про найкоротший шлях, задачі транспортного типу.
Одним з найважливіших класів задач, для яких застосування динамічного програмування виявляється плідним, є задачі послідовного прийняття рішень. Їхньою особливістю є те, що шукані змінні х1, x2, .., хk ,... повинні визначатися в строгій тимчасовій послідовності й не повинні мінятися місцями. Як приклад опишемо так звану задачу про наймання працівників (задачу про використання робочої сили).
У даній задачі розглядається деякий економічний об'єкт (фірма, магазин, завод і т.п.), що функціонує протягом кінцевого числа періодів, позначуваних номерами k (k ∊ l:n). Кожний період k характеризується нормативною потребою в певній кількості однотипних працівників mk. Той же обсяг робіт може бути виконаний іншою кількістю співробітників ξk, що, однак, тягне додаткові витрати або за рахунок нераціонального використання робочої сили, або через підвищення оплати за інтенсивну працю. Розміри цих додаткових витрат описуються функціями gk (ξk - mk), де (ξk - mk) - відхилення фактичної чисельності працюючих ξk , від планово необхідної mk , причому gk (0)=0. Управлінське рішення на кроці k полягає у виборі величини зміни числа співробітників хk∊Z, що однозначно визначає кількість працюючих протягом наступного періоду: ξk+1 = ξk+хk. Витрати по зміні кількості працівників (найманню й звільненню) при переході від періоду k до періоду (k+1) задаються функцією uk (хk) , де також uk (0)=0. Тоді сумарні витрати, викликані прийнятим на кроці k рішенням, характеризуються значенням функції
План задачі (стратегія керування) х = (x1, ..., хn-1, 0) полягає у виборі поетапних змін кількості працівників, а його сумарна ефективність описується адитивною функцією
На основі сформульованої моделі ставиться задача мінімізації цільової функції (витрат) (5.15). Додамо, що постановка задачі не буде коректною, якщо не задати початкову умову на кількість працівників.
Існують дві модифікації даної задачі, обумовлені типом початкової умови: у першому випадку задається вихідне значення на першому етапі m1, а в другому - необхідну кількість в n-му періоді mn .
Розглянемо перший випадок. Оскільки фіксованим є початкова кількість працівників і, навпроти, нічого не відомо про те, якої ця кількість повинне бути на останньому етапі, то розгляд процесу прийняття рішень зручніше почати з кінця. Оптимальне керування на останньому етапі п за умовою дорівнюють х*n = n(ξ)=0, тому мінімальні витрати повністю визначаються кількістю працівників в останньому періоді:
Для інших попередніх кроків основне рекурентне співвідношення прийме вид
де Λk(ξ) - мінімальні витрати з k-го по п-й періоди, у припущенні, що кількість працівників в k-й період дорівнює ξ. Точки л(ξ), у яких досягаються мінімуми (5.17), визначають умовне оптимальне керування на кожному кроці.
Послідовно визначаючи л(ξ) і дійшовши до етапу 1, ми зможемо знайти безумовне оптимальне керування x1* з тої умови, що на початок першого періоду чисельність працівників повинна становити ξ1* = m1 , a саме
Інші компоненти оптимального плану хk* і стану ξk*, що утворять оптимальну траєкторію, послідовно перебувають за рекурентними формулами
після чого легко обчислити оптимальне значення цільової функції (5.15).
Зупинимося тепер на другому випадку, коли задане фінальний стан керованого об'єкта, тобто бажана кількість працівників на останньому періоді ξn*= mn. Очевидно, що в даній ситуації варто надійти з точністю «до навпаки» і розглянути процес прийняття рішень від початку до кінця. Найкраще умовне керування на першому кроці 1(ξ) буде знайдено в процесі обчислення функції
де стан ξ ≥0 є можливою кількістю працівників на початковому кроці. Відповідно, основне рекурентне співвідношення виразить мінімальні витрати аж до k-го періоду через такі для попередніх періодів (з першого по ( k-1)-й) за умови, що чисельність працівників в k-й період буде дорівнює ξ:
Будуть знайдені також функції k(ξ), k∊2:n, що визначають умовні оптимальні керування. На останньому періоді, у силу початкової умови, ξn*= mn. Звідси шляхом послідовного рішення рекурентних рівнянь можуть бути знайдені оптимальні чисельності працівників ξ*k і безумовні оптимальні керування:
На закінчення, як і в першому випадку, підраховується мінімальна величина витрат.
Узагальнюючи викладені схеми рішення, можна дійти висновку:
При використанні алгоритмів динамічного програмування, якщо задано початковий стан керованої системи, то задача вирішується у зворотному напрямку, а якщо кінцеве, тo - у прямому. Нарешті, якщо задані як початкове, так і кінцеве стану, то задача суттєво ускладнюється. (Як компроміс у цьому випадку можна відмовитися від оптимізації на першому або останньому етапі.)
Динамічні задачі керування запасами.
Однієї з найбільш відомих сфер використання методів динамічного програмування є така область математичної економіки, як теорія керування запасами. Її предметом є розробка й дослідження математичних моделей систем, що займають проміжне положення між джерелами (виробниками) тих або інших ресурсів і їхніх споживачів.
При математичній формалізації процесів керування запасами дуже часто доводиться використовувати стрибкоподібні, недиференційовані й кусково-безперервні функції. Як правило, це обумовлюється необхідністю обліку ефектів концентрації, фіксованих витрат і плати за замовлення. У зв'язку із цим одержувані задачі із трудом піддаються аналітичному вирішенню класичними методами, однак можуть бути успішно вирішені за допомогою апарата динамічного програмування.
Розглянемо досить типову задачу, що виникає в процесі планування діяльності системи постачання, - так звану динамічну задачу керування запасами.
Нехай є деяка система постачання (склад, оптова база й т.п.), що планує свою роботу на п періодів. Її діяльність зводиться до забезпечення попиту кінцевих споживачів на деякий продукт, для чого вона здійснює замовлення виробникові даного продукту. Попит клієнтів (кінцевих споживачів) у даній моделі розглядається як деяка інтегрована величина, що приймає задані значення для кожного з періодів, і він повинен завжди задовольнятися (тобто не допускаються заборгованості й відмови). Також передбачається, що замовлення, що посилається виробникові, задовольняється їм повністю, і часом між замовленням і його виконанням можна зневажити (тобто розглядається система з миттєвим виконанням замовлення). Уведемо позначення:
yk - остача запасу після ( k-1)-го періоду;
dk - заздалегідь відомий сумарний попит в k-м періоді;
хk - замовлення (поставка від виробника) в k-м періоді;
сk (хk) -витрати на виконання замовлення об'єму xk в k-м періоді;
sk (ξk) - витрати на зберігання запасу об'єму ξk в k-м періоді.
Після одержання поставки й задоволення попиту об'єм товару, що підлягає зберіганню в період k, складе ξk = yk + хk - dk.
Розглядаючи параметр yk , можна записати співвідношення:
Витрати на одержання й зберігання товару в період k описуються функцією
Планом задачі можна вважати вектор х = (х1, х2, ..., хn), компонентами якого є послідовні замовлення протягом розглянутого проміжку часу. Співвідношення між запасами (5.24) у сполученні з деякою початковою умовою зв'язує стану системи з обраним планом і дозволяє виразити сумарні витрати за всі п періодів функціонування керованої системи постачання у формі адитивної цільової функції:
В рамках сформульованої моделі представляється задача знаходження послідовності оптимальних керувань (замовлень) x*k і пов'язаних з ними оптимальних станів (запасів) ξ*k, які перетворюють у мінімум (5.25). Як початкова умова використовуємо вимогу про збереження після завершення керування заданої кількості товару yn+1 , а саме
При вирішенні поставленої задачі методом динамічного програмування як функцію стану керованої системи Λk(ξ) логічно взяти мінімальний об'єм витрат, що виникають за перші k періодів за умови, що в k-й період є запас ξ . Тоді можна записати основне рекурентне співвідношення
оскільки
Система рекурентних співвідношень (5.27)-(5.28) дозволяє знайти послідовність функцій стану Λ1(ξ), Λ2(ξ), …, Λn(ξ) і умовних оптимальних керувань 1(ξ), 2(ξ), …, n(ξ)... На n-м кроці за допомогою початкової умови (5.26) можна визначити х*n = n (yn+1). Інші значення оптимальних керувань x*k визначаються по формулі:
Особливий інтерес представляє окремий випадок задачі (5.24)-(5.25), при якому передбачається, що функції витрат на поповнення запасу сk(хk) є вгнутими по хk, а функції витрат на зберігання sk(ξk) є лінійними щодо об'єму збереженого запасу, тобто sk(ξk) = skξk . Паралельно помітимо, що обидві передумови є досить реалістичними.
Позначимо функцію витрат протягом k-ro періоду через
або, що те ж саме,
У силу зроблених припущень всі функції витрат fk (xk , yk+1) є вгнутими (як суми вгнутої й лінійної функцій). Дана властивість значно спрощує процес рішення, тому що для пошуку мінімуму вгнутих функцій fk (xk , yk+1) досить розглянути тільки дві крайні точки множини, на якому відшукується мінімум. З урахуванням уведеного позначення задачу (5.24)-(5.25) можна записати у вигляді:
при умовах
Розглянемо процедуру вирішення (5.32)-(5.33). Шукається мінімум суми ввігнутих функцій fk(xk , yk+1), тому рішення буде досягатися на одній із крайніх точок множини, обумовленої умовами (5.33). Загальне число змінних xk і yk у системі (5.33) дорівнює 2п. Однак, зважаючи на те, що в ній тільки п рівнянь, в оптимальному плані буде не більше п ненульових компонентів, причому для кожного періоду k значення xk і yk не можуть дорівнювати нулю одночасно (у силу необхідності задоволення попиту або за рахунок замовлення, або за рахунок запасу). Формально це твердження можна представити у вигляді умови нежорсткісті, що доповнює:
де
З погляду змістовної інтерпретації умови (5.34)-(5.35) означають, що при оптимальному керуванні замовлення постачальника на нову партію не повинно надходити, якщо на початку періоду є ненульовий запас, або розмір замовлення повинен дорівнювати величині попиту за ціле число періодів. Звідси треба, що запас на кінець останнього періоду повинен дорівнювати нулю: в*n+1=0. Останнє дозволяє вирішувати задачу в прямому напрямку, застосовуючи рекурентне співвідношення
де ξ = уk+1= хk + уk - dk .
З огляду на (5.34)-(5.35) і вгнутість fk (xk, ξ), є те, що мінімум (5.36) досягається в одній із крайніх точок xk =0 або xk = ξ + dk тому
тоді для попереднього періоду функція стани може бути виражена як
на oснові чого в загальному виді одержуємо модифіковану форму для рекурентного співвідношення
При подальших припущеннях, що конкретизують, про вид функцій fk (xk , уk+1) можна одержати ще більш компактні форми для рекурентних співвідношень. Однак ці питання носять досить приватний характер, і ми їх розглядати не будемо. Відзначимо лише, що наведені в даному пункті перетворення непогано ілюструють загальні підходи, застосовувані в динамічному програмуванні, а також ті властивості задач, які відкривають можливості, для ефективного й плідного використання відповідних методів.
Контрольні запитання.
1. Для вирішення яких задач призначений метод динамічного програмування?
2. У чому є суть методу динамічного програмування?
3. Яким умовам повинна задовольняти задача, щоб для її вирішення міг бути застосований алгоритм динамічного програмування?
4. Які труднощі пов'язані з обчислювальними алгоритмами динамічного програмування?
5. Що визначає напрямок рішення задачі в алгоритмах динамічного програмування?
6. Сформулюйте математичну модель для задачі про найм працівників.
7. Випишіть основне рекурентне співвідношення, використовуване при вирішенні задачі про найм працівників.
8. З якими особливостями задач керування запасами зв'язане застосування при їхньому рішенні апарата динамічного програмування?
9. Який вид має цільова функція в динамічній задачі керування запасами?
10. Випишіть основне рекурентне співвідношення, використовуване при вирішенні динамічної задачі керування запасами.
