
- •Тема 4. Цілочисельні задачі та методи їх розв’язування
- •4.1. Постановка задачі цілочисельного лінійного проґрамування (цлп), її інтерпретація та основні підходи до розв’язування
- •4.2. Метод Ґоморі для розв’язування лінійних задач змішаного проґамування
- •4.3. Розв’язування задач змішаного та лінійного програмування за допомогою методу гілок та границь
- •4.4. Задачі цілочисельного лінійного проґрамування з булевими змінними. Методи приведення цілочисельних задач до булевих
- •4.5. Задача про комівояжера
- •4.6. Контрольні запитання
4.4. Задачі цілочисельного лінійного проґрамування з булевими змінними. Методи приведення цілочисельних задач до булевих
До задач з цілочисельними булевими змінними схема методу гілок та границь може бути успішно застосована, причому як до загальних задач, так і до розширень задачі про наплечник з декількома обмеженнями.
Розглянемо
застосування методу гілок та границь
до розширеної задачі про наплечник
(тобто задачі, для якої
).
Приклад 3. Знайти оптимальний розв’язок наступної задачі:
3x1+2x2+4x3+ x4+5x5 Max
x1+ x2+5x3+2x4+4x5<=9
2x1+3x2+3x3+5x4+3x5<=9, значення кожного x — нуль або одиниця.
Для розв’язання цієї задачі насамперед впорядкуємо змінні в порядку спадання значень коефіцієнтів функції мети при них: x5x3x1x2x4. В цьому порядку реалізуватимемо розгалуження з метою якнайшвидшого відтинання підмножин неперспективних розв’язків якомога раніше. В якості стратегії розгалуження використовуватимемо стратегію вглиб дерева. Окрім того, для цієї задачі існує декілька можливостей для обчислення верхньої границі.
З одного боку, верхню границю нащадка можна обчислювати як верхню границю предка, зменшену на значення коефіцієнта функції мети при змінній, яка фіксується при даному розгалуженні в нулі, з іншої — розв’язуючи підзадачу як задачу лінійного програмування без врахування умов цілочисельності (не слід при цьому забувати, що значення кожної зі змінних може бути лише між нулем та одиницею). Значення верхніх границь, визначених за останнім методом, будуть ближчими до дійсних оптимальних значень функції мети, ніж ті які визначені за першим способом. Однак в цьому випадку для отримання значення границі необхідно розв’язати задачу лінійного програмування, що порівняно з операцією віднімання вимагає значно більшої кількості обчислень
3x1+2x2+4x3+ x4+5x5 Max
x1+ x2+5x3+2x4+4x5<=9
2x1+3x2+3x3+5x4+3x5<=9
Результати імітаційних експериментів дійсно підтверджують, що ефективність методу вища у випадку простішого способу обчислення верхніх границь, ніж при розв’язуванні задачі лінійного програмування, хоча точність цих границь менша.
Будь-яку задачу цілочисельного програмування можна привести до лінійної задачі булевого програмування. Для цього задача спочатку приводиться до поліноміальної булевої, а потім до лінійної булевої.
Приведення до поліноміальної задачі можна здійснити двома способами:
замінити кожну з цілочисельних змінних сумою бінарних
; недоліком такого представлення є значна кількість булевих змінних;
замінити двійковим представленням
, де — найбільше ціле, для якого
за умови
.
В свою чергу булева поліноміальна задача завжди може бути приведена до лінійної:
здійснюємо заміну
;
якщо наявні добутки двох різних змінних, то заміняємо їх додатковою змінною та парою обмежень —
;
xj |
xk |
xjk |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
в загальному випадку спочатку добуток багатьох змінних замінюється однією змінною, потім з добутком виконується перша заміна та додаються два обмеження
;
,
.