Метод Гомори

Краткая теория

Метод Гомори является одним из методов решения задач целочисленного линейного программирования. Идея метода Гомори заключается в следующем.

Отбрасывается условие целочисленности  и полученная задача линейного программирования  решается симплекс-методом. Если оптимальное решение задачи  является целочисленным, то оно является и решением исходной задачи. Если оптимальное решение задачи  не является целочисленным, то к основным ограничениям добавляется новое линейное ограничение, обладающее следующими свойствами:

1) оптимальный нецелочисленный план задачи ему не удовлетворяет;

2) любой целочисленный план задачи ему удовлетворяет.

Затем решается расширенная задача. Процесс повторяется до получения целочисленного решения. Способы построения дополнительного линейного ограничения различны для полностью и частично целочисленных задач линейного программирования. В силу свойств 1 и 2 дополнительное ограничение еще называют отсечением Гомори, а метод Гомори - методом отсечения.

Если задача разрешима в целых числах, то через конечное число итераций оптимальный целочисленный план будет найден.

Если в процессе решения появится строка с нецелым свободным членом и целыми остальными коэффициентами, то соответствующее уравнение не имеет решения в целых числах. В таком случае и исходная задача неразрешима в целых числах.

Несмотря на точность метода Гомори, он имеет ограниченное применение. С его помощью целесообразно решать задачи небольшой размерности, поскольку число итераций может быть очень большим.

Алгоритм метода Гомори рассмотрим на конкретном примере.

Заказать решение задач, узнать цену:
или подписаться на телеграм-канал, чтобы не потерять контакты:

Пример решения задачи

Задача

Решить задачу целочисленного программирования методом Гомори.

 – целые

Решение

Приведем задачу к каноническому виду.

Решаем задачу симплекс-методом.

Заполняем симплексную таблицу 0-й итерации.

БП Симплексные
отношения
7 -9 0 0 0
0 9 2 1 1 0 0 9/2
0 7 0 3 0 1 0
0 5 4 5 0 0 1 5/4
0 -7 9 0 0 0  

Переходим к таблице 1-й итерации:

БП Симплексные
отношения
7 -9 0 0 0
0 13/2 0 -3/2 1 0 -1/2  
0 7 0 3 0 1 0  
7 5/4 1 5/4 0 0 1/4  
35/4 0 71/4 0 0 7/4  

В индексной строке все члены неотрицательные, поэтому получено следующее решение задачи линейного программирования (выписываем из столбца свободных членов):

 

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

Выбираем базисную переменную с наибольшей дробной частью.

По 1-й строке строим дополнительное ограничение:

Ограничение принимает вид:

Введем в ограничение дополнительную переменную:

Домножим последнее ограничение на -1:

Припишем это ограничение к последней симплексной таблице, и, следуя методу Гомори, выполним симплексные преобразования:

БП Симплексные
отношения
7 -9 0 0 0 0
0 13/2 0 -3/2 1 0 -1/2 0
0 7 0 3 0 1 0 0 7/3
7 5/4 1 5/4 0 0 1/4 0 1
0 -1/2 0 -1/2 0 0 -1/2 1 1
35/4 0 71/4 0 0 7/4 0  

Просматриваем строку, содержащую отрицательное число в столбце свободных членов, и выбираем любое отрицательное число в этой строке. Выбранное число будет определять разрешающий столбец.

Ключевой столбец соответствует .

Находим ключевую строку, для этого определяем:

На пересечении ключевого столбца и ключевой строки находим разрешающий элемент, т.е. 5/4.

Вектор  выводим из базиса и вводим вектор .

Переходим к таблице 1-й итерации:

БП Симплексные
отношения
7 -9 0 0 0 0
0 8 6/5 0 1 0 -1/5 0 20/3
0 4 -12/5 0 0 1 -3/5 0
-9 1 4/5 1 0 0 1/5 0 5/4
0 0 2/5 0 0 0 -2/5 1 0
-9 -71/5 0 0 0 -9/5 0  

Переходим к таблице 2-й итерации:

БП Симплексные
отношения
7 -9 0 0 0 0
0 8 0 0 1 0 1 -3 8
0 4 0 0 0 1 -3 6
-9 1 0 1 0 0 1 -2 1
7 0 1 0 0 0 -1 5/2
-9 0 0 0 0 -16 71/2  

Переходим к таблице 3-й итерации:

БП Симплексные
отношения
7 -9 0 0 0 0
0 7 0 -1 1 0 0 -1  
0 7 0 3 0 1 0 0  
0 1 0 1 0 0 1 -2  
7 1 1 1 0 0 0 1/2  
7 0 16 0 0 0 7/2  

В индексной строке все члены неотрицательные, поэтому получено следующее решение задачи линейного программирования (выписываем из столбца свободных членов):

Найденное оптимальное решение удовлетворяет условию целочисленности и является решением исходной задачи.

Заказать решение задач, узнать цену:
или подписаться на телеграм-канал, чтобы не потерять контакты: