Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие ЭММ готово - копия.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
3.77 Mб
Скачать

5.2. Алгоритм розв’язування задач цілочислового програмування

Алгоритм розв’язування задач цілочислового програмування наступний:

1. Розв'язується задача лінійного програмування без обмежень на цілочисельність, наприклад, симплекс-методом.

2. Якщо оптимальне рішення задачі лінійного програмування нецілочисельне, то проводиться «велика ітерація». Будується лінійне обмеження, якому задовольняє будь-яке цілочисельне рішення задачі і не задовольняє отримане оптимальне нецілочисельне значення. Геометрично це означає – провести перетин (гіперплощина), який відсікав би нецілочисельну вершину, не зачіпаючи решту цілочисельних крапок. Такий перетин називають правильним. Правильний перетин повинен задовольняти наступним умовам:

1) умова відсікання: оптимальне рішення задачі лінійного програмування не задовольняє умові відсікання;

2) умова правильності: всі цілочисельні рішення задачі задовольняють умові відсікання.

Оскільки для початкової задачі додаткове обмеження (відсікання) даватиме неприпустиме базисне рішення, необхідно провести «малі ітерації» для отримання оптимального рішення. Якщо отримане оптимальне рішення нецілочисельне, то проводиться наступне відсікання. В іншому випадку пошук завершений.

Р. Гомори запропонував ідею формування додаткових обмежень, яка призводить до вирішення задач цілочислового програмування за кінцеве число кроків.

    1. 5.3. Метод Гомори

Перший алгоритм Р. Гомори полягає в наступному:

Хай задана повністю цілочисельна лінійна задача:

(5.2)

(5.3)

Хай в результаті лінійних операцій над рівняннями системи (5.3) отримано нове лінійне рівняння

(5.4)

Цілою частиною числа називається найбільше ціле число , яке не перевищуюче . Наприклад ; .

Замінивши в рівнянні (5.4) всі коефіцієнти їх цілими частинами, отримаємо:

(5.5)

Якщо всі є цілочисельними, то ліва частина рівняння (5.5) теж цілочисельна. Рівняння (5.5) можна посилити таким чином:

(5.6)

Це обмеження-нерівність (4.6) можна перетворити в обмеження-рівняння шляхом введення додаткової цілочисельної і ненегативної змінної : (5.7)

Віднімемо (5.4) з (5.7). Враховуючи, що отримаємо:

(5.8)

В першому методі Гомори всі обмеження формуються відповідно до рівнянь (5.8) – це і є відсікання нецілочисельних крапок.

Фактично, (5.8) – рівняння відсікаючої гіперплощини. Після рішення задачі лінійного програмування одержуємо деяке базисне рішення, в якому деякі змінні можуть бути цілочисельними, а інші – нецілочисельними. Для нецілочисельних базисних змінних будується відсікання по першому алгоритму Гомори, послідовно, для кожної з них. Якщо нецілочисельних змінних декілька, то краще вибрати ту, у якої більше дробова частина. Якщо рівняння вибраної базисної змінної має вигляд

, (5.9)

то рівняння додаткового обмеження-відсікання виглядає таким чином:

. (5.10)

Побудова відсікання - «велика ітерація». Далі для звуженої області проводяться «малі ітерації».

Вирішення задач цілочислового лінійного програмування можуть бути відсутні, якщо:

1) цільова функція є необмеженою знизу, тобто як початкова нецілочисельна, так і цілочисельна задача лінійного програмування не мають рішення;

2) початкова задача лінійного програмування має рішення, а цілочисельна не має. В симплекс-таблиці це видно таким чином: в стовпці вільних членів в деякому рядку стоїть неціле число, а вся решта коефіцієнтів цього рядка ­– цілі числа.

Збіжність даного алгоритму достатньо повільна. Для задачі з 10-ма змінними необхідно провести порядку 1000 ітерацій.

Перебір можливих цілих точок допустимої області не зменшує обчислень, оскільки їх звичайно достатньо багато.

Округлення нецілочисельного рішення до найближчого цілого може дати крапку, що не належить області.

Другий алгоритм Р. Гомори:

Застосовується для вирішення як повністю так і не повністю цілочисельних задач. Багато індексів при змінних розбивається на дві неперекресні підмножини і так, що:

при , ( - цілочисельні);

при , ( - нецілочисельні).

Як і в першому алгоритмі Гомори, спочатку знаходиться рішення задачі лінійного програмування без обмежень на цілочисельність, і далі проводяться відсікання за допомогою введення додаткових обмежень.

Припустимо, що після розв’язання задачі лінійного програмування отримана деяка базисна змінна, яка повинна бути цілочисельною:

, (5.11)

де - вільна змінна.

Тоді по другому алгоритму Гомори відсікання будується таким чином:

, (5.12)

де (5.13)