Рассматриваемый алгоритм целочисленного программирования сводится к методу последовательного уточнения оценок с дополнительными правилами расширения и сокращения текущей таблицы решения задачи.
Пример 2. Получить целочисленный оптимальный план задачи
Z(X) = x1— 4х2 — 2х3 + Зх4 —> max при условиях
3x1+x2+8x3+x4=35
x1 +x3+x4≤6
xj≥ 0, хj — целые числа, j = 1, 2, 3, 4.
Решение. Пошаговое решение задачи приведено в табл. 7.2.
Таблица 7.2
На шаге 2 решения задачи без ограничения целочисленности получаем оптимальный нецелочисленный план
X = (0, 0, 29/7, 13/7).
Поскольку обе базисные координаты X нецелочисленны, выбираем любую — первую или вторую — строку таблицы на шаге 2, а именно вторую, и строим добавочное ограничение
-5/7x1-6/7x2-1/7x5+x6=-6/7.
Вводя ограничение добавочной строкой на шаге 2, находим направляющий элемент в этой строке:
Осуществляя преобразование табл. 7.2 с направляющим элементом (-5/7), получаем на шаге 3 оптимальный план новой задачи, снова нецелочисленный. На шаге 3 добавляем очередное условие, получаем четыре строки ограничений. Поскольку на шаге 3 достигается
в столбце А6, то х6 становится базисной переменной на шаге 4. В соответствии с правилом сокращения таблицы на шаге 4 вычеркиваем строку и столбец, соответствующие х6, добавляем новую строку, а на шаге 5 получаем псевдоплан X = (4, 0, 3, -1). Методом последовательного уточнения оценок на шаге 6 получаем план, но нецелочисленный. Оптимальный целочисленный план получаем лишь на шаге 7: X* = (О, 1, 4, 2), max Z(X) = -6.
Метод ветвей и границ
Одним из широко распространенных методов решения целочисленных задач является метод ветвей и границ, который может быть использован как для задач линейного программирования, так и для задач, не сводимых к задачам линейного программирования. Рассмотрим идею метода ветвей и границ на примере общей задачи дискретного программирования
f(X) -> max, (7.9)
Х€D (7.10)
где D — конечное множество.
Сначала найдем оценку £(D) (границу) функции f(X), X е D: f(X) ≤ £(D) для V X е D. Если для некоторого плана Х° задачи (7.9)-(7.10) справедливо равенствоf(X0) = £(D), то Х° = X* является решением задачи. Если указанное условие не выполняется, то возможно разбиение (ветвление) множества D на конечное число непересекающихся подмножеств D1i: ỤD1i. = D, ∩D1i = Ө, и вычисление оценки £(D1i) (границ), 1≤i≤m (рис 7.1)
Рис. 7.1
Если для некоторого плана X1i е Di1, 1 ≤ / ≤ m выполняется условие f(Xkl)= £(D1k)≥ £(D1i), 1≤i≤m то Xk1=X* является оптимальным планом (решением) задачи (7.9)-(7.10).
Если такого плана нет, то выбирается подмножество Dkl с наибольшей оценкой £(D1i):
и разбивается на конечное число непересекающихся подмножеств
D2kj: UD2kj=D1k, ∩D2kj=Ө. Для каждого подмножества находится оценка £(D2kj), 1≤j≤n (рис 7.2)
(рис. 7.2).
Если при этом найдется план X2j е D2kJ, 1 ≤j ≤n, такой, что f(X2r)= £(D2kr)≥ £(D2kj), 1≤j≤n, то X2r= X* является решением задачи (7.9)-(7.10). Если такого плана нет, то процедуру ветвления осуществляют для множества D2kj с наибольшей оценкой £(D2kj) , 1≤j≤n . Способ ветвления определяется спецификой конкретной задачи.
Рассмотрим задачу, которую можно свести к задаче целочисленного линейного программирования.
Пример.
Контейнер объемом 5 м3 помещен на контейнеровоз грузоподъемностью 12 т. Контейнер требуется заполнить грузом двух наименований. Масса единицы груза mj (в тоннах), объем единицы груза Vj (в м3), стоимости Cj (в условных денежных единицах) приведены в табл. 7.3.
Таблица 7.3
Вид груза у | mj | V, | Сj |
1 | 3 | 1 | 10 |
2 | 1 | 2 | 12 |
Требуется загрузить контейнер таким образом, чтобы стоимость перевозимого груза была максимальной.
Решение. Математическая модель задачи имеет вид
Z(X) = 10x1+12x2→max, (7.11)
3x1+x2≤12,
x1+2x2≤5
x1≥0 (7.12)
x2≥0
x1, x2- целые числа (7.13)
где x1, x2 - число единиц соответственно первого и второго груза.
Множество планов этой задачи обозначим через D - это множество целых точек многогранника ОАВС (рис. 7.3).
Рис. 7.3
Сначала решаем задачу (7.11)—(7.13) без условия целочисленности, получим оценку множества D - значение функции Z(X) на оптимальном плане Х° = (19/5, 3/5):
ТочкаXнеявляется оптимальным планом задачи (7.1 1)— (7.13). Поэтому в соответствии с методом ветвей и границ требуется разбить множество D на непересекающиеся подмножества. Выберем первую нецелочисленную переменную x1=19/5=34/5 и разобьем множество D на два непересекающихся подмножества D11 и D22. Линии x1=3 (L3) и x4= (L3) являются линиями разбиения.
L\ |
Рис. 7.4
Найдем оценки £(D11) и £(D12), для чего решим задачи линейного программирования
Z(X)=10x1+12x2→max,
3x1+x2≤12
x1+2x2≤5
x1≤3
x1≥0, x2 – целые числа
Z(X)=10x1+12x2→max,
3x1+ x2≤12
x1+2x2≤5
x1≥4
x1≥0, x2 – целые числа
Например, графическим методом:
X11eD11→X01= (3,1); £(D11)=42; X12eD12→X02= (4,0); £(D12)=40.
Результат ветвления приведен на рис. 7.5
Рис. 7.5 |
План X01 удовлетворяет условиям задачи (7.11)-(7.13), и для него выполняется условие: Z(X11)= £(D11)=42 >
£(/)/) = 42 >£(D12) = 40. Следовательно, план X°1= (3, 1) является решением задачи (7.11)-(7.13),
т.е. надо взять три единицы первого груза и одну единицу второго груза.
Алгоритм метода ветвей и границ
ЦИКЛИЧЕСКИЙ АЛГОРИТМ ЦЕЛОЧИСЛЕННОГО ПРОГРАММИРОВАНИЯ
Рассмотрим следующую задачу линейного программирования:
Максимизировать
X0=a00-a01x1-a02x2-……..-a0nxn,
при условии
xn+1=an+1,0-an+1,1x1-an+1,2x2-…….-an+1,nxn,
.
.
xn+m=an+m,0- an+m,1x1-an+m,2x2-…….-an+m,nxn,
xj≥0 (j=1,…….,n+1,…….,n+m).
Заметим, что xn+1, . ., хn+m — слабые переменные, a x1 ... ., хn — исходные переменные задачи (1). Если наряду с ограничениями (1) потребовать, чтобы все хj , (j'=1, . . ., т) были целыми, то задача будет называться задачей целочисленного программирования. Существует большое количество задач, особенно комбинаторных, которые можно сформулировать как задачи целочисленного программирования.
Ограничения (1) определяют выпуклую область OABCD в n-мерном пространстве, как показано на рис. 13.1. Узлы целочисленной решетки на рис. 13.1 изображены точками. Такие точки, расположенные внутри области OABCD, являются допустимыми решениями задачи целочисленного программирования. Оптимальные решения задачи линейного программирования всегда располагаются на границе области решений. В данном случае граничные точки не являются даже допустимыми решениями, поскольку ни одна из них не целочисленна. Предположим, что область допустимых решений сужена до выпуклой оболочки допустимых целых точек внутри допустимой области. На рис. 13.1 эта выпуклая оболочка показана затененной областью OEFGH. Эту затененную область можно рассматривать как область допустимых решений некоторой другой задачи линейного программирования. Действительно, если к задаче линейного программирования, определяющей допустимую область OABCD, добавить ограничение типа RR', как показано на рис. 13.1, то вновь полученная задача будет иметь OEFGH в качестве области допустимых решений. Такая вновь полученная область обладает двумя важными свойствами: во-первых, она содержит все допустимые целочисленные точки исходной задачи линейного программирования (поскольку она является выпуклой оболочкой этих точек), во-вторых, все крайние точки новой области — целочисленны. Поэтому любое базисное оптимальное решение модифицированной задачи линейного программирования имеет своими компонентами целые числа и является оптимальным решением исходной задачи целочисленного программирования.