Заметим, что если положить
= avs, отсечение (23) будет обладать двумя важными свойствами. Во-первых,

Это означает, что прямая допустимость таблицы сохраниться, еслииспользовать отсечение (23) в качестве ведущей строки. Во-вторых,
, т.е. ведущий элемент равен 1 (если отсечение используетсякак ведущая строка). Легко удостовериться (путем исследования формул изменениябазисных переменных), что преобразование симплексной таблицы с единичнымведущим элементом сохраняет целочисленность элементов симплексной таблицы.
Эти идеи послужили основанием прямого алгоритма вцелочисленном программировании:
Шаг 0. Начать со столбцовой таблицы, в которой ai0
0 (i
1) и все элементы a0j, aijи ai0 – целые.
Шаг 1. Проверить выполнение условий a0j
0 (j
1); если они выполнены, то конец,текущее базисное решение оптимально; если нет – перейти к шагу 2.
Шаг 2. Выбрать ведущий столбец s с a0si0/ais среди строк с ais> 0. Эта строка служит производящей дляотсечения Гомори.
Шаг 3. Получить отсечение Гомори из производящей строки идописать ее внизу таблицы, т.е. добавить к ограничениям задачи уравнение (23),где
.
Шаг 4. Произвести преобразование таблицы, используяотсечение (23) как ведущую строку. Слабая переменная sk в (23)станет небазисной. Вернуться к шагу 1.
Доказательство конечности алгоритма см.[2], стр. 346-353.
Поскольку выбор производящей строки является задачейнетривиальной, по-видимому, должно существовать несколько строк, которые могутслужить в качестве производящих. В предварительных рассуждениях в качествепроизводящей строки использовалась ведущая строка симплекс-метода. Эта строкавсегда дает отсечение, которое является ведущей строкой с ведущим элементом,равным единице. По-видимому, в таблице существуют и другие строки, из которыхмогут быть получены отсечения с такими же свойствами. Допустим, что отсечение получается по формуле:

Строка v может стать производящей тогда и только тогда, когда

где
определяется из условия

Определим множество V(s) как совокупность строк,удовлетворяющих условию (25).
Следующие два правила представляют собой примеры допустимыхправил выбора производящей строки:
Правило 1.
1. Составить последовательныйконечный список индексов строк таким образом, чтобы индекс каждой строки вошелв него по меньшей мере один раз. Перейти к 2.
2. Если список пуст или не содержитни одного индекса из V(s), вернуться к 1.; в противном случае найти в списке первый индекс v
V(s). Выбрать строку v какпроизводящую. Вывести из списка индекс v и все предшествующие емуиндексы. Перейти к 3.
3. Последовательно выбирать строку v, взятую в 2.,как производящую, до тех пор, пока v
V(s). Как только v
V(s), вернуться к 2.
Правило 2.
1. Пусть Vt(s) – множество V(s),соответствующее t-й таблице. Если Vt(s) содержит более одного элемента: Vt(s) = {v1, v2, …, vk+2}, то в качестве производящей выбрать такую строку
, что в последовательности множеств V1(s1), V2(s2), …, Vt(s) строка
появилась раньше (непозднее) остальных
и затем сохраняласьвплоть до Vt(s); перейти к 2.
2. Последовательно выбирать строку v, взятую в 1.,до тех пор, пока
. Как только
, вернуться к 1.
Подробнее об алгоритме можно прочитать в [2], стр. 344.
2.2.3.ТЕХНИКА ПОЛУЧЕНИЯ НАЧАЛЬНОГО ДОПУСТИМОГО БАЗИСАРешение каждым из приведенных выше методов можетпроизводиться только в том случае, если задача линейного программирования является или прямо, или двойственнодопустимой. Такая допустимость означает наличие начального допустимого базиса висходной задаче. Если задача допустима и прямо, и двойственно, то полученноерешение – оптимально. В большинстве случаев после постановки задачиоказывается, что она не допустима ни прямо, ни двойственно. Поэтому приведемалгоритм получения начального допустимого базиса.
Пусть задача линейного программирования записана вканонической форме:
минимизировать

при условиях


Все bi можно сделать неотрицательными, умножив, если надо, соответствующееуравнение на –1. Тогда можно добавить в каждое уравнение искусственнуюпеременную
(искусственныепеременные должны быть неотрицательными) таким образом, чтобы из искусственныхпеременных образовать начальный базис:


