- •Міністерство освіти і науки україни національний транспортний університет Дослідження операцій в моделюванні управлінських рішень
- •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. Зшивання сітьових моделей
- •Література
- •Для нотаток
3.2. Основна задача лінійного програмування
Будь-яку задачу лінійного програмування можна звести до стандартної форми, так званої «основної задачі лінійного програмування» (ОЗЛП), яка формулюється так: знайти невід’ємні значення змінних х1, х2,..., хn, які задовольняли б умовам-рівностям:
(3.2.1)
і зводили б до максимуму лінійну функцію цих змінних:
(3.2.2)
Переконаємося в цьому. По-перше, випадок, коли L треба звести не до максимуму, а до мінімуму, легко зводиться до попереднього, якщо просто змінити знак L на зворотний (максимізувати не L, а L’= – L). Крім того, від будь-яких умов-нерівностей можна перейти до умов-рівностей ціною введення деяких нових «додаткових» змінних. Покажемо, як це робиться, на конкретному прикладі.
Нехай потрібно знайти невід’ємні значення змінних х1, х2, х3, що задовольняють обмеженням-нерівностям
(3.2.3)
і обертають в максимум лінійну функцію від цих змінних:
(3.2.4)
Почнемо з того, що приведемо умови (3. 2. 3) до стандартної форми, так, щоб знак нерівності був ≥, а праворуч стояв нуль. Отримаємо:
(3.2.5)
А тепер позначимо ліві частини нерівностей (3. 2. 5) відповідно через у1 і у2:
(3.2.6)
З умов (3.2.5) і (3.2.6) видно, що нові змінні у1 і у2 також повинні бути невід’ємними.
Яка ж тепер перед нами стоїть задача? Знайти невід’ємні значення змінних х1, х2, х3, у1, у2 такі, що вони задовольнятимуть умови-рівності (3.2.6) і звернуть в максимум лінійну функцію цих змінних (те, що в L не входять додаткові змінні у1, у2, неважливо: можна вважати, що вони входять, але з нульовими коефіцієнтами). Перед нами основна задача лінійного програмування (ОЗЛП). Перехід до неї від первісної задачі з обмеженнями-нерівностями (3.2.3) «куплений» ціною збільшення числа змінних на два (число нерівностей).
Можливий і зворотний перехід: від ОЗЛП до завдання з обмеженнями-нерівностями.
Отже, будь-яка задача лінійного програмування може бути зведена до стандартної форми ОЗЛП. Ми не будемо детально зупинятися на способах вирішення цього завдання. Їм присвячені спеціальні посібники (наприклад, [4, 5]), вони описані в багатьох книгах по дослідженню операцій (наприклад, [6, 7]). У наступному параграфі ми викладемо тільки деякі міркування загального характеру щодо існування рішення ОЗЛП і способів його знаходження. Ніякими розрахунковими алгоритмами ми займатися не будемо, а відішлемо зацікавленого читача до вищезазначених посібників.
3.3. Транспортна задача лінійного програмування
У попередньому параграфі ми описали деякі загальні підходи до вирішення завдань лінійного програмування. Однак існують окремі типи задач лінійного програмування, які, в силу особливої своєї структури, допускають рішення більш простими методами. З них ми зупинимося тільки на одній — «транспортні й задачі» (ТЗ). Вона ставиться таким чином: є m пунктів відправлення (ПО) A1, A2,..., Аm, в яких зосереджені запаси якихось однорідних вантажів у кількості відповідно a1, а2,..., аm одиниць. Є n пунктів призначення (ПН) В1, B2,.... Вn, що подали заявки відповідно на b1, b2,..., bn одиниць вантажу. Сума всіх заявок дорівнює сумі всіх запасів:
(3.3.1)
Відомі вартості cij перевезення одиниці вантажу від кожного пункту відправлення Аi до кожного пункту призначення Вj (i = 1,2, …, m; j=1,2…,n. Всі числа cij, що утворюють прямокутну таблицю (матрицю), задані:
(3.3.2)
Коротко матрицю (3.3.2) будемо позначати (cij). Вважається, що вартість перевезення кількох одиниць вантажу пропорційна їх кількості. Потрібно скласти такий план перевезень (звідки, куди і скільки одиниць везти), щоб усі заявки були виконані, а загальна вартість всіх перевезень мінімальна. Поставимо цю задачу як задачу лінійного програмування. Позначимо хij — кількість одиниць вантажу, що відправляється з i-го ПО Ai в j-й ПН Bj. Невід’ємні змінні xij теж можна записати у вигляді матриці:
(3.3.3)
яку ми будемо коротко позначати (хij). Сукупність чисел (хij) (3. 3. 3.) ми будемо називати «планом перевезень», а самі величини хij-«перевезеннями». Ці невід’ємні змінні повинні відповідати таким вимогам.
1. Сумарна кількість вантажу, що направляється з кожного ПO в усі ПН, має дорівнювати запасу вантажу в даному пункті. Це дасть нам m умов рівностей:
(3.3.4)
2. Сумарна кількість вантажу, що доставляється в кожен ПН з усіх ПO, повинно дорівнювати заявці, поданій цим пунктом. Це дасть нам n умов рівностей:
(3.3.5)
3. Сумарна вартість всіх перевезень, тобто сума величин xij, помножених на відповідні вартості cij, повинна бути мінімальною:
(3.3.6)
де знак подвійної суми означає, що підсумовування проводиться по всіх комбінаціям індексів i і j, тобто по всім парам ПO – ПН. Ми бачимо, що перед нами — завдання лінійного програмування з умовами — рівностями (3.3.4), (3.3.5) і мінімізацією лінійної функції (3.3.6). Особливістю цього завдання є те, що всі коефіцієнти в умовах (3.3.4), (3.3.5) рівні одиниці — це дозволяє вирішувати завдання дуже простими способами. Про них і піде мова. Перш за все, помічаємо, що умови рівності (3.3.4), (3.3.5) не є лінійно незалежними, так як їхні праві частини пов’язані умовою (3.3.1). Число лінійно незалежних серед рівнянь (3.3.4), (3.3.5) дорівнює не m + n (числу рівнянь), a m + n – 1. Загальне число змінних xij в нашому завданні одно m∙n; як би не дозволяти рівняння (3.3.4), (3.3.5), число базисних змінних дорівнюватиме m + n – 1, а кількість вільних змінних
Ми знаємо, що в задачі лінійного програмування оптимальне рішення досягається в одній з вершин ОДР, в опорній точці, де принаймні k змінних дорівнюють нулю. Значить, в нашому випадку для оптимального плану принаймні (m – 1) (n-1) перевезень повинні бути рівні нулю (з відповідних ПО у відповідні ПН нічого не перевозиться). Будемо називати будь-який план перевезень допустимим, якщо він задовольняє умовам (3.3.4), (3.3.5) (усі заявки задоволені, всі запаси вичерпано). Допустимий план будемо називати опорним, якщо в ньому відмінні від нуля не більше m + n – 1 базисних перевезень, а інші перевезення дорівнюють нулю. План (xij) будемо називати оптимальним, якщо він, серед всіх допустимих планів, призводить до мінімальної сумарної вартості перевезень (L = min). З огляду на особливу структуру транспортної задачі при її розв’язанні не доводиться довго і нудно розв’язувати та перерозв’язувати систему рівнянь. Всі операції по знаходженню оптимального плану зводяться до маніпуляцій безпосередньо з таблицею, де в певному порядку записані умови транспортної задачі: перелік пункт відправлення (ПО) і пункт призначення (ПН), заявки і запаси, а також вартості перевезень сij. У міру заповнення цієї таблиці в її клітинках заповнюються самі перевезення xij. Транспортна таблиця складається з m рядків і n стовпців. У правому верхньому куті кожної клітинки ми будемо ставити вартість сij перевезення одиниці вантажу з Ai у Bj, а центр клітинки залишимо вільним, щоб помістити в неї саме перевезення xij. Клітинку таблиці, відповідну пунктам Ai, Bj, будемо коротко позначати (i, j).
Приклад транспортної таблиці, де є умови задачі та вартості перевезень, але немає ще самих перевезень, наведено в таблиці 3.3.1, де m=4, n=5.
Перш за все займемося складанням опорного плану. Це в транспортній задачі дуже просто: можна, наприклад, застосувати так званий «метод північно-західного кута». Продемонструємо його безпосередньо на конкретних даних таблиці 3.3.1. Почнемо заповнення транспортної таблиці з лівого верхнього («північно-західного») кута. Пункт В1 подав заявку на 18 одиниць вантажу; задовольнимо її із запасів пункту А1. Після цього в ньому залишається ще 30 – 18 = 12 одиниць вантажу; віддамо їх пункту B2.
Таблиця 3.3.1
ПН ПО |
B1 |
B2 |
B3 |
B4 |
B5 |
Запаси aj |
A1 |
13 |
7 |
14 |
7 |
5 |
30 |
A2 |
11 |
8 |
12 |
6 |
8 |
48 |
A3 |
6 |
10 |
10 |
8 |
11 |
20 |
A4 |
14 |
8 |
10 |
10 |
15 |
30 |
Заявки bj |
18 |
27 |
42 |
15 |
26 |
128 |
Але заявка цього пункту ще не задоволена; виділимо відсутні 15 одиниць із запасів пункту А2, тощо. Розмірковуючи точно таким же чином, заповнимо до кінця перевезеннями xij транспортну таблицю (таблиця 3.3.2). Перевіримо, чи є цей план допустимим: так, тому що в ньому сума перевезень по рядку дорівнює запасу відповідного пункту відправлення, а сума перевезень за стовпцем — заявці відповідного пункту призначення; отже, все в порядку — всі заявки задоволені, всі запаси витрачені (сума запасів дорівнює сумі заявок і виражається числом 128, що стоїть у правому нижньому куті таблиці).
Таблиця 3.3.2
ПН ПО |
B1 |
B2 |
B3 |
B4 |
B5 |
Запаси aj |
A1 |
18 13 |
12 7 |
14 |
7 |
5 |
30 |
A2 |
11 |
15 8 |
33 12 |
6 |
8 |
48 |
A3 |
6 |
10 |
9 10 |
11 8 |
11 |
20 |
A4 |
14 |
8 |
10 |
4 10 |
26 15 |
30 |
Заявки bj |
18 |
27 |
42 |
15 |
26 |
128 |
Тут і
надалі ми проставляємо у таблиці тільки
відмінні від нуля перевезення, а клітинки,
що відповідають нульовим перевезень,
залишаємо «вільними». Перевіримо, чи є
план перевезень, даний у таблиці 3.3.2,
опорним (чи не занадто багато там
відмінних від нуля, «базисних»
перевезень?). Число вільних клітинок
з нульовими перевезеннями в таблиці
3.3.2 дорівнює як раз
,
отже план є опорним. Ось як нам його
вдалося легко побудувати!
Тепер настав час подумати про те, чи є цей план оптимальним — тобто мінімальна чи для нього загальна вартість перевезень? Швидше за все, ні (адже складаючи опорний план, ми зовсім не думали про вартість). Так і є — план не оптимальний. Наприклад, відразу видно, що можна його поліпшити, якщо зробити в ньому «циклічну перестановку» перевезень між клітинами таблиці, зменшивши перевезення в «дорогій» клітинці (2.3) з вартістю 12, але зате збільшивши перевезення в «дешевої» клітині (2.4) з вартістю 6. Щоб план залишався опорним, ми повинні при цьому зробити одну з вільних клітин базисної, а одну з базисних — вільної. Скільки одиниць вантажу можемо ми перенести по циклу (2.4) → (3.4) → (3.3) → (2.3), збільшуючи перевезення у непарних вершинах циклу і зменшуючи — у парних? Очевидно, не більше, ніж 11 одиниць (інакше перевезення в клітці (3.4) стали б негативними). Очевидно, в результаті циклічного перенесення допустимий план залишається допустимим — баланс запасів і заявок не порушується.
Ну що ж, зробимо це перенесення і запишемо новий, поліпшений план перевезень в таблиці 3.3.3.
Тепер подивимося, чого ми досягнули, скільки заощадили? Загальна вартість плану, показаного в таблиці 3.3.2, дорівнює L1 = 18 • 13 + 12 • 7 + 15 • 8 + 33 • 12 + 9 • 10 +11 • 8 + 4 • 10 + 26 • 15 =1442; загальна вартість плану, показаного в таблиці 10.3, дорівнює L2 = 18 • 13 +12 • 7 +15 • 8 + 22 • 12 +11 • 6 +20 • 10 + 4 • 10 + 26 • 15 = 1398.
Таблиця 3.3.3
ПН ПО |
|
|
|
|
|
Запаси,
|
|
13 18 |
7 12 |
14 |
7 |
5 |
30 |
|
11 |
8 15 |
12 22 |
6 11 |
8
|
48 |
|
6 |
10 |
10 20 |
8 |
11 |
20 |
|
14 |
8 |
10 |
10 4 |
15 26 |
30 |
Заявки,
|
18 |
27 |
42 |
15 |
26 |
128 |
Таким чином, нам вдалося зменшити вартість перевезень на 1442 – 1398 = 44 одиниці. Це, втім, можна було передбачити і не підраховуючи повну вартість плану. Дійсно, алгебраїчна сума вартостей, які стоять у вершинах циклу, зі знаком плюс, якщо перевезення у цій вершині збільшуються, і зі знаком мінус — якщо зменшуються (так звана «ціна циклу»), в даному випадку дорівнює: 6 – 8 + 10 – 12 = – 4. Значить, при перенесенні однієї одиниці вантажу з цього циклу вартість перевезень зменшується на чотири. А ми їх перенесли цілих 11; значить, вартість повинна була зменшитися на 11 • 4 = 44 одиниці, що й сталося. Значить, весь секрет оптимізації плану перевезень у тому, щоб переносити («перекидати») перевезення по циклах, які мають негативну ціну.
У теорії лінійного програмування доводиться, що при опорному плані для кожної вільної клітини транспортної таблиці існує цикл, і притому єдиний, одна вершина якого (перша) лежить в даній вільної клітці, а інші — в базисних клітинах. Тому, відшукуючи «вигідні» цикли з негативною ціною, ми повинні видивлятися — чи немає в таблиці спокусливих, «дешевих» вільних клітин. Якщо така клітина є, потрібно для неї знайти цикл, обчислити його цепу і, якщо вона буде негативною, перенести з цього циклу стільки одиниць вантажу, скільки буде можливо (без того, щоб якісь перевезення зробити негативними). При цьому дана вільна клітина стає базисної, а якась із колишніх базисних — вільної. Очевидно, це рівносильно «перевиконанню» системи рівнянь щодо інших базисних змінних, але робиться це набагато легше.
Спробуємо ще раз покращити план, наведений в таблиці 3.3.3. Наприклад, нас «спокушає» дешева клітина (1.5) з вартістю 5. Чи не можна поліпшити план, збільшивши перевезення в цій клітці, зате зменшивши в інших (при цьому, звичайно, доведеться подекуди перевезення теж збільшити). Давайте розглянемо уважно таблицю 3.3.3 і знайдемо в ній цикл, перша вершина якого лежить у вільній клітці (1.5), а решта — все в базисних клітинах. Трохи подумавши, ми цей цикл виявимо: це послідовність клітин (1.5) → (4.5) → (4.4) → (2.4) → (2.2) → (1.2) (і замикаючи цикл, знову повертаємося в (1.5)). Непарні вершини циклу відзначені плюсом — це значить, що перевезення в цих клітинах збільшуються: парні — знаком мінус (перевезення зменшуються). Цикл показаний стрілками в таблиці 3.3.4. Підрахуємо ціну цього циклу. Вона дорівнює 5 – 15 + 10 – 6 + 8 – 7 = – 5. Так як ціна циклу негативна, то перекидання перевезень по цьому циклу вигідна. Подивимося, скільки ж одиниць ми можемо по ньому перекинути? Це визначається найменшим перевезенням, що стоїть в негативній вершині циклу. У даному випадку це знову 11 (чистий збіг!). Множачи 11 на ціну циклу — 5 отримаємо, що за рахунок перекидання 11 одиниць вантажу з даного циклу ми ще зменшимо вартість перевезень на 55 (надаємо допитливому читачеві зробити це самостійно).
Таблиця 3.3.4
ПН ПО |
В1 |
В2 |
В3 |
В4 |
В5 |
Запаси аі |
А1 |
13 18 |
7 1 |
14
|
7
|
5 + |
30 |
А2 |
11
|
8 15+ |
12 22 |
6 11 |
8
|
48 |
А3 |
6
|
10
|
10 20 |
8
|
11
|
20 |
А4 |
14
|
8
|
10
|
+ 10 4
|
- 15 26
|
30 |
Заявки bj |
18
|
27 |
42 |
15 |
26 |
128 |
Таким чином, розшукуючи в транспортній таблиці вільні клітини з негативною ціною циклу і перекидаючи з цього циклу найбільшу можливу кількість вантажу, ми будемо все зменшувати і зменшувати вартість перевезень. Нескінченно зменшуватися вона не може (вона ніяк не може стати менше нуля!). Значить, рано чи пізно ми прийдемо до оптимального плану. Для такого плану вже не залишається ні. однієї вільної клітини з негативною ціною циклу. Це — ознака того, що оптимальне рішення знайдено.
У теорії лінійного програмування існують способи, що дозволяють автоматично, без роздумів, виділяти вільні клітини з негативною ціною циклу (так званий «метод потенціалів»), але ми на них зупинятися не будемо, так само як і на ряді інших способів вирішення транспортної задачі, з якими читач може ознайомитися за спеціальним посібникам [5, 7, 8].
На закінчення скажемо кілька слів про так званої «транспортної задачі з неправильним балансом», коли сума заявок не дорівнює сумі запасів:
(3.3.7)
Якщо
(сума запасів більше суми заявок), то
всі заявки можуть бути задоволені, але
при цьому не всі запаси будуть витрачені.
Завдання може бути зведена до транспортної
задачі з правильним балансом, якщо
ввести в розгляд якийсь «фіктивний»
пункт призначення ВФ,
умовно приписавши йому заявку, рівну
надлишку запасів над заявками:
(3.3.8)
Тоді задача зводиться до задачі з правильним балансом, так як:
Виникає питання: а які ж вартості перевезень з пунктів відправлення Ai у «фіктивний» пункт призначення Bф? Природно покласти їх рівними нулю (адже фактично в пункт ВФ нічого перевозитися не буде!). Тому для будь-якого пункту відправлення вартість ciф = 0.
Введемо в транспортну таблицю додатковий стовпець, що відповідає пункту призначення bФ, і проставимо в ньому нульові вартості перевезень. Після цього задача вирішується як звичайна транспортна, і для неї знаходиться оптимальний план перевезень:
При цьому потрібно мати на увазі, що всі перевезення xiф, що стоять у правій колонці, фактично нікуди не відправляються, а залишаються на пунктах відправлення Аi.
Може
зустрітися також випадок
(Запасів
не вистачає для задоволення всіх заявок);
в цьому випадку можна тим або іншим
способом «зрізати» заявки і знову
отримати транспортну задачу з правильним
балансом. Якщо
нас абсолютно не цікавить, наскільки
«справедливо» задовольняються заявки,
а важливо тільки «подешевше розвезти»
наявні запаси (все одно, куди), то можна
ввести в розгляд фіктивний пункт
відправлення Аф,
умовно приписавши йому відсутній запас,
рівний:
Докладніше на цих питаннях ми зупинятися не будемо.
Питання для самоперевірки:
Сформулюйте постанову задачи лінійного програмування.
Запишіть вирази для цільової функції та обмеження.
Сформулюйте математичну модель задачи про планування виробництва.
Сформулюйте математичну модель задачи про завантаження обладнання.
Сформулюйте математичну модель задачи про постачання сировиною.
Запишіть основну задачу лінійного програмування.
Постанова транспортної задачи лінійного програмування.
Запишіть математичну модель транспортної задачи лінійного програмування.
Сутність методу «північно-західного» кута.
Які існують методи рішення задач лінійного програмування.

2
-