Розділи

загрузка...
6.4. Методи відтинання. Метод Гоморі; Математичне програмування - Наконечний С.І.

6.4. Методи відтинання. Метод Гоморі

В основу методів цілочислового програмування покладено ідею Данціга. Допустимо, що необхідно розв’язувати задачу лінійного програмування, всі або частина змінних якої мають бути цілочисловими. Можливо, якщо розв’язувати задачу, не враховуючи умову цілочисловості, випадково одразу буде отримано потрібний розв’язок. Однак така ситуація малоймовірна. Переважно розв’язок не задовольнятиме умову цілочисловості. Тоді накладають додаткове обмеження, яке не виконується для отриманого плану задачі, проте задовольняє будь-який цілочисловий розв’язок. Таке додаткове обмеження називають правильним відтинанням. Система лінійних обмежень задачі доповнюється новою умовою і далі розв’язується отримана задача лінійного програмування. Якщо її розв’язок знову не задовольняє умови цілочисловості, то будується нове лінійне обмеження, що відтинає отриманий розв’язок, не зачіпаючи цілочислових планів. Процес приєднання додаткових обмежень повторюють доти, доки не буде знайдено цілочислового оптимального плану, або доведено, що його не існує.

Подпись: Рис. 6.3 Геометрично введення додаткового лінійного обмеження означає проведення гіперплощини (прямої), що відтинає від багатогранника (багатокутника) допустимих розв’язків задачі ту його частину, яка містить точки з нецілочисловими координатами, однак не торкається жодної цілочислової точки даної множини. Отриманий новий багатогранник розв’язків містить всі цілі точки, які були в початковому, і розв’язок, що буде отримано на ньому, буде цілочисловим (рис. 6.3).

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

Розглянемо алгоритм, запропонований Гоморі, для розв’язування повністю цілочислової задачі лінійного програмування, що ґрунтується на використанні симплексного методу і передбачає застосування досить простого способу побудови правильного відтинання.

Нехай маємо задачу цілочислового програмування:

(6.5)

за умов:

, (6.6)

, (6.7)

— цілі числа . (6.8)

Допустимо, що параметри — цілі числа.

Не враховуючи умови цілочисловості, знаходимо розв’язок задачі (6.5)—(6.7) симплексним методом. Нехай розв’язок існує і міститься в такій симплексній таблиці:

Таблиця 6.1

Базис

Сбаз

План

c1

c2

...

cm

cm + 1

...

cn

х1

х2

...

хm

хm + 1

...

хn

х1

c1

b1

1

0

...

0

a1m + 1

...

a1n

х2

c2

b2

0

1

...

0

a2m + 1

...

a2n

...

...

...

...

...

...

...

...

...

...

хm

cm

bm

0

0

...

1

amm + 1

...

amn

Змінні — базисні, а — вільні. Оптимальний план задачі: . Якщо — цілі числа, то отриманий розв’язок є цілочисловим оптимальним планом задачі (6.5)—(6.8). Інакше існує хоча б одне з чисел, наприклад, — дробове. Отже, необхідно побудувати правильне обмеження, що відтинає нецілу частину значення .

Розглянемо довільний оптимальний план задачі (6.5) —(6.7). Виразимо в цьому плані базисну змінну через вільні змінні:

. (6.9)

Виразимо коефіцієнти при змінних даного рівняння у вигляді суми їх цілої та дробової частин. Введемо позначення: — ціла частина числа b, — дробова частина числа b*1. Отримаємо:

*1: {Цілою частиною числа а називається найбільше ціле число , що не перевищує а. Дробовою частиною є число , яке дорівнює різниці між самим числом а та його цілою частиною, тобто .

Наприклад, для     ,  ;

для    ,

, (6.10)

або

. (6.11)

Отже, рівняння (6.11) виконується для будь-якого допустимого плану задачі (6.5)—(6.7). Допустимо тепер, що розглянутий план є цілочисловим оптимальним планом задачі. Тоді ліва частина рівняння (6.11) складається лише з цілих чисел і є цілочисловим виразом. Отже, права його частина також є цілим числом і справджується рівність:

, (6.12)

де N — деяке ціле число.

Величина N не може бути від’ємною. Якщо б , то з рівняння (6.12) приходимо до нерівності:

.

Звідки . Тобто це означало б, що дробова частина перевищує одиницю, що неможливо. У такий спосіб доведено, що число N є невід’ємним.

Якщо від лівої частини рівняння (6.12) відняти деяке невід’ємне число, то приходимо до нерівності:

, (6.13)

яка виконується за допущенням для будь-якого цілочислового плану задачі (6.5)—(6.7). У такий спосіб виявилося, що нерівність (6.13) є шуканим правильним відтинанням.

Отже, для розв’язування цілочислових задач лінійного програмування (6.1)—(6.4) методом Гоморі застосовують такий алгоритм:

1. Симплексним методом розв’язується задача без вимог цілочисловості змінних — (6.1)—(6.3).

Якщо серед елементів умовно-оптимального плану немає дробових чисел, то цей план є розв’язком задачі цілочислового програмування (6.1)—(6.4).

Якщо задача (6.1)—(6.3) не має розв’язку (цільова функція необмежена, або система обмежень несумісна), то задача (6.1) — (6.4) також не має розв’язку.

2. Коли в умовно-оптимальному плані є дробові значення, то вибирається змінна, яка має найбільшу дробову частину. На базі цієї змінної (елементів відповідного рядка останньої симплексної таблиці, в якому вона міститься) будується додаткове обмеження Гоморі:

.

3. Додаткове обмеження після зведення його до канонічного вигляду і введення базисного елемента приєднується до останньої симплексної таблиці, яка містить умовно-оптимальний план. Отриману розширену задачу розв’язують і перевіряють її розв’язок на цілочисловість. Якщо він не цілочисловий, то процедуру повторюють, повертаючись до п. 2. Так діють доти, доки не буде знайдено цілочислового розв’язку або доведено, що задача не має допустимих розв’язків на множині цілих чисел.

У літературі [12, 27] доведено, що за певних умов алгоритм Гоморі є скінченним, але процес розв’язування задач великої розмірності методом Гоморі повільно збіжний. Слід також мати на увазі, що і кількість ітерацій суттєво залежить від сформованого правильного відтинання. Наведене правило (6.13) щодо формування правильного відтинання не єдине. Існують ефективніші відтинання, які використовуються у другому та третьому алгоритмах Гоморі [12, 27], однак наявний практичний досвід ще не дає змоги виділити з них найкращий.

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

Як правило, розв’язування задач цілочислового програмування потребує великого обсягу обчислень. Тому при створенні програм для ЕОМ особливу увагу слід приділяти засобам, що дають змогу зменшити помилки округлення, які можуть призвести до того, що отриманий цілочисловий план не буде оптимальним.

Розглянемо приклад розв’язування цілочислової задачі лінійного програмування методом Гоморі.

Сільськогосподарське підприємство планує відкрити сушильний цех на виробничій площі 190 м2, маючи для цього 100 тис. грн і можливість придбати устаткування двох типів: А і В. Техніко-економічну інформацію стосовно одиниці кожного виду устаткування подано в табл. 6.2:

Таблиця 6.2

Показник

Устаткування

Ресурс

А

В

 

Вартість, тис. грн

25

10

100

Необхідна виробнича площа, м2

40

20

190

Потужність, тис. грн/рік

350

150

Розв’язання. Нехай х1 і х2 —кількість комплектів устаткування відповідно типу А і В.

Запишемо економіко-математичну модель задачі:

,

;

;

,

і — цілі числа.

Розв’язуємо задачу, нехтуючи умовою цілочисловості. Остання симплексна таблиця набуде вигляду:

Таблиця 6.3

Хбаз

Сбаз

План

350

150

0

0

х1

х2

х3

х4

х1

350

1

1

0

х2

150

0

1

1475

0

0

10

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

.

Оскільки , , , то додаткове обмеження набуває вигляду:

.

Зведемо його до канонічної форми та введемо штучну змінну:

.

Приєднавши отримане обмеження до симплексної таблиці (табл. 6.3) з умовно-оптимальним планом, дістанемо:

Таблиця 6.4

Хбаз

Сбаз

План

350

150

0

0

0

М

х1

х2

х3

х4

х5

х6

х1

350

1

1

0

0

0

х2

150

0

1

0

0

х6

–М

0

0

–1

1

1475

0

0

10

0

0

0

0

М

0

Розв’язавши наведену задачу, знаходимо цілочисловий оптимальний план: , .