 
                                Этот метод применяется для решения задачи целочисленного программирования (4.1), (4.2), при условии целочисленности всех коэффициентов и правых частей ограничений задачи. Эти условия не сужают область применения метода, так как вполне выполнимы. Например, [37], ограничение

легко можно записать в виде неравенства
6x1 + 2x2 ≤ 39,
в которой дроби отсутствуют.
Необходимость введения требования целочисленности параметров исходной задачи обусловлена следующими соображениями. Из дальнейшего рассмотрения будет видно, что как исходные, так и дополнительные переменные задачи, решаемые методом Р. Гомори, должны быть целочисленными. Между тем, наличие в ограничениях дробных коэффициентов приводит к нарушению целочисленности дополнительных переменных.
Перейдем к рассмотрению сути метода. На первом этапе решается задача с ослабленными ограничениями, не содержащими условия целочисленности переменных. Если полученное оптимальное решение оказывается целочисленным, то оно является также решением исходной задачи. В противном случае необходимо ввести дополнительные ограничения, порождающие, вместе с исходными ограничениями, новую задачу линейного программирования, решение которой оказывается целочисленным и совпадает с оптимальным решением исходной целочисленной задачи. Пусть последняя симплексная таблица задачи с ослабленными ограничениями имеет следующий вид:
Таблица 4.1
| Базисн. перем. | x1 | … | xi0 | … | xm | V1 | Vj | Vn | Решение | ||
| x1 | 1 | … | 0 | … | 0 | a11 | … | a1j | … | a1n | b1 | 
| ... | ... | .... | |||||||||
| xi | 0 | … | 1 | … | 0 | ai1 | … | aij | … | ain | bi | 
| .... | .... | .... | |||||||||
| xm | 0 | … | 0 | … | 1 | am1 | … | amj | … | amn | bm | 
| f | 0 | … | 0 | … | 0 | c1 | … | cj | … | cn | f0 | 
Здесь xi (i = 1, 2, …, m) – базисные переменные, а vj (j = 1, 2, …, n) – небазисные переменные.
Пусть i-я строка таблицы соответствует нецелому значению базисной переменной xi. Выразим эту переменную как
 (4.3)
 (4.3)
где bi – нецелое число. Далее представим правые части в виде
bi = [bi] + di; (4.4)
aij = [aij] + dij, (4.5)
где в квадратных скобках записано наибольшее целое число, которое меньше, чем число внутри скобки. Например, если
b1 = 3/2, то [b1] = 1, а di = 1/2
или если
a11 = –5/2, то [d11] = –3, а d11 = 2/3.
После подстановки (4.4) и (4.5) в (4.3) получим

или
 (4.6)
 (4.6)
Поскольку все переменные xi и vj принимают целые значения, правая часть выражения (4.6) должна быть целочисленной, откуда следует, что левая часть этого выражения также должна принимать целые значения. Далее, так как
dij ≥ 0 и Vj ≥ 0
для всех i и j, то

Следовательно, выполняется неравенство

Это означает, что

поскольку di < 1.
Так как левая часть этого неравенства должна принимать целые значения, можно записать необходимое условие ее целочисленности как

Это ограничение перепишем в виде равенства
 (4.7)
 (4.7)
где Si – неотрицательная дополнительная переменная, которая по определению должна принимать целые значения.
Такое ограничение-равенство определяет отсечение Гомори для полностью целочисленной задачи.
Из симплексной таблицы следует, что vj = 0 и, следовательно Si = –di, то есть данная компонента решения не является допустимой. Это означает, что полученное ранее решение непрерывной задачи не удовлетворяет новому ограничению.
В такой ситуации следует использовать двойственный симплекс-метод (раздел 2.5), реализация которого обеспечивает отсечение некоторой области многогранника решений, не содержащих точек с целочисленными координатами.
Преобразуем исходную табл. 4.1 путем приписывания к ней строки и столбца, соответствующих построенному отсечению Гомори для полностью целочисленной задачи. В результате получим новую табл. 4.2.
Таблица 4.2
| Базисн. перем. | x1 | … | xi | … | xm | V1 | Vj | Vn | Si | Решение | ||
| x1 | 1 | … | 0 | … | 0 | a11 | … | a1j | … | a1n | 0 | b1 | 
| ... | ... | ... | ... | |||||||||
| xi | 0 | … | 1 | … | 0 | ai1 | … | aij | … | ain | 0 | bi | 
| ... | ... | ... | ... | |||||||||
| xm | 0 | … | 0 | … | 1 | am1 | … | amj | … | amn | 0 | bm | 
| f | 0 | … | 0 | … | 0 | c1 | … | cj | … | cn | 0 | f0 | 
| Si | 0 | … | 0 | … | 0 | –di1 | … | –dij | … | –din | 1 | –di | 
Если полученное (в результате применения двойственного симплекс-метода) решение является целочисленным, то процесс решения исходной задачи завершен. В противном случае необходимо ввести новое отсечение на базе полученной табл. 4.2 и вновь воспользоваться двойственным симплекс-методом. Эта процедура повторяется до тех пор, пока не будет найдено целочисленное решение.
Если на некоторой итерации при использовании двойственного симплекс-метода обнаруживается отсутствие допустимого решения, то рассматриваемая задача не имеет допустимого решения.
При знакомстве с методом Гомори может сложится впечатление, что размеры симплекс-таблицы неограниченно возрастают по мере добавления новых отсечений. Это не соответствует действительности. Общее число ограничений порожденной задачи не может превышать количества переменных исходной задачи [37].
Таким образом, описанные процедуры решения целочисленной задачи линейного программирования можно формализовать в виде следующего алгоритма.
Шаг 1. Решается исходная целочисленная задача линейного программирования с ослабленным ограничением, то есть без требования целочисленности оптимальных решений, отображаемых в итоговой симплекс-табл. 4.1.
Шаг 2. Проверяется целочисленность оптимальных решений. Если в столбце решений итоговой симплекс-таблицу (табл. 4.1) содержатся только целые числа, то получено оптимальное решение целочисленной задачи линейного программирования. В противном случае переход на шаг 3.
Шаг 3. Если в столбце решений содержаться дробные решения, то для выбранного дробного решения формируется уравнение отсечения Гомори (4.7) и это уравнение добавляется в систему ограничений исходной задачи в виде дополнительной Si – строки итоговой таблицы шага 1.
Шаг 4. С помощью алгоритма двойственного симплекс-метода осуществляется переход к следующей симплекс-таблице. Далее возврат на шаг 2.
Метод Гомори имеет два недостатка. Первое – ошибки округления, возникающие в процессе вычислений на компьютере, в ряде случаев, приводят к получению неверного (неоптимального) целочисленного решения. Второе – решения, последовательно получаемые в процессе реализации метода, не являются допустимыми, то есть алгоритм не позволяет получить какое-либо целочисленное решение, отличное от оптимального. Это означает, что в случае вынужденного прекращения вычислений до момента окончания процесса решения в памяти компьютера не будет содержаться никакого «приемлемого» целочисленного решения исходной задачи.
Пример 4.1. Пусть необходимо максимизировать функцию
f = 7x1 + 9x2 → max, (4.7)
при ограничениях
–x1 + 3x2 ≤ 6;
7x1 + x2 ≤ 35;
x1 ≥ 0; x2 ≥ 0, (4.8)
x1 и x2 – целые. (4.9)
Шаг 1. Решаем исходную задачу без учета ограничения (4.9). Применяя обычный симплекс-алгоритм (раздел 2.3) получим следующую итоговую симплекс-таблицу (табл. 4.3).
Таблица 4.3
| БП | x1 | x2 | x3 | x4 | Решение | 
| x2 | 0 | 1 | 
 | 
 | 
 | 
| x1 | 1 | 0 | 
 | 
 | 
 | 
| f | 0 | 0 | 
 | 
 | 63 | 
Шаг 2. Полученное оптимальное решение задачи линейного программирования является дробным:
 и
 и 
Переход на шаг 3.
Шаг 3. Учитывая, что  в качестве производящей строки можно выбрать любую из двух строк таблицы. Выберем строку соответствующей переменной x2:
 в качестве производящей строки можно выбрать любую из двух строк таблицы. Выберем строку соответствующей переменной x2:

или

Следовательно, уравнение отсечения Гомори имеет вид

и определяет дополнительную Si – строку в новой симплекс-таблице (табл. 4.4).
Таблица 4.4
| БП | x1 | x2 | x3 | x4 | S1 | Правая часть | 
| x2 | 0 | 1 | 
 | 
 | 0 | 
 | 
| x1 | 1 | 0 | 
 | 
 | 0 | 
 | 
| S1 | 0 | 0 | 
 | 
 | 1 | 
 | 
| f | 0 | 0 | 
 | 
 | 0 | 63 | 
Шаг 4. С помощью алгоритма двойственного симплекс-метода осуществляется переход к следующей симплекс-таблице (табл. 4.5).
Таблица 4.5
| БП | x1 | x2 | x3 | x4 | S1 | Решение | 
| x2 | 0 | 1 | 0 | 0 | 1 | 3 | 
| x1 | 1 | 0 | 0 | 
 | 
 | 
 | 
| x3 | 0 | 0 | 1 | 
 | 
 | 
 | 
| f | 0 | 0 | 0 | 1 | 8 | 59 | 
которая также не приводит (шаг 2) к оптимальному целочисленному решению. Поэтому на шаге 3 формируем новое отсекающее уравнение Гомори. В табл. 4.5 строке с базисной переменной x1 соответствует равенство

порождающее отсечение

Добавим это отсечение к последней таблице
Таблица 4.6
| БП | x1 | x2 | x3 | x4 | S1 | S2 | Решение | 
| x2 | 0 | 1 | 0 | 0 | 1 | 0 | 3 | 
| x1 | 1 | 0 | 0 | 
 | 
 | 0 | 
 | 
| x3 | 0 | 0 | 1 | 
 | 
 | 0 | 
 | 
| S2 | 0 | 0 | 0 | 
 | 
 | 1 | 
 | 
| f | 0 | 0 | 0 | 1 | 8 | 0 | 59 | 
И в результате повторного использования (шаг 4) двойственного симплекс-метода получим табл. 4.7, которая дает оптимальное целочисленное решение исходной задачи:
x1 = 4; x2 = 3; f = 55.
Таблица 4.7
| БП | x1 | x2 | x3 | x4 | S1 | S2 | Решение | 
| x2 | 0 | 2 | 0 | 0 | 1 | 0 | 3 | 
| x1 | 1 | 0 | 0 | 0 | –1 | 1 | 4 | 
| x3 | 0 | 0 | 1 | 0 | –4 | 1 | 1 | 
| x4 | 0 | 0 | 0 | 1 | 6 | –7 | 4 | 
| f | 0 | 0 | 0 | 1 | 2 | 7 | 55 | 
Геометрическая интерпретация данного примера наглядно демонстрирует (рис. 4.2) как рассмотренные выше дополнительные отсечения исключают некоторые области многогранника допустимых решений [37]. Первое отсечение

записанное в переменных x1 и x2, после соответствующей замены принимает следующий вид

или S1 + x2 = 3.

Рис. 4.2. Области допустимых решений непрерывной и целочисленной задач
Это уравнение эквивалентно неравенству x2 ≤ 3.
Аналогичным образом второе отсечение

порождает эквивалентное ограничение в переменных x1 и x2:
x1 + x2 ≤ 7.
На рис. 4.2 показано, как введение этих двух ограничений позволяет получить новую экстремальную точку с координатами (4, 3), в которой достигается оптимум исходной целочисленной задачи.