- •Глава 7. Целочисленное программирование
- •7.1. Проблема целочисленности
- •X1, x2 0, int (целые).
- •7.2. Метод отсечений
- •Пример 7.1. Выведем условие отсечения для задачи
- •X1, x2 0, целые.
- •7.3. Метод ветвей и границ
- •7.4. Аддитивный алгоритм
- •7.5. Другие методы
- •7.6. Задания для самостоятельной работы
X1, x2 0, целые.
Умножаем 1-е неравенство на 2 и приводим все условия к равенствам:
4x1+2x2-x3 15;
12x1+7x2+x4 5;5
25x1+10x2+х5 90.
Решаем непрерывную задачу симплекс-методом. В табл. 7.3 представлено решение НЗ (оптимальная таблица выделена двойной рамкой, строка оценок записана первой для удобства расширения таблицы).
Базис А0 А1 А2 А3 А4 А5 А6 j 8,
27 0 0 0 0 А2 0 1 0 - 0 А3 0 0 1 0 А1 1 0 0 - 0 А6 -
0 0 0 - -
1 - - - - -
Решение содержит нецелые переменные. Наибольшую дробную часть имеет переменная x3. Выписываем соответствующую ей строку:
x3+x4+x5=.
Из нее получаем 1-е условие отсечения
x4+x5 ,
которое приводим к равенству
-x4-x5+x6= - .
Это равенство добавляем к оптимальной симплекс-таблице решенной НЗ с включением в число базисных вектора А6 (табл.7.3). К расширенной таблице применяем двойственный метод (направляющей является новая строка, направляющий столбец находится по ). Полученное решение, которое называют оптимальным относительно первого отсечения, приведено в табл. 7.4 (см. часть в двойной рамке).
Т
Базис А0 А1 А2 А3 А4 А5 А6 А7 j 8,
2
0 0 0 0 0 0 А2 0 1 0 1 0 - 0 А3 0 0 1 0 0 1 0 А1 1 0 0 - 0 0 А5 0 0 0 1 - 0 А7 - 0 0 0 0 0 - 1
Оно также является нецелочисленным. Новое отсечение строим по переменной х2, имеющей наибольшую дробную часть. Выписываем уравнение
х2+х4 - х6=,
из которого следует условие отсечения
х6
и затем равенство
х6 - х7=,
добавляемое к последней симплекс-таблице (см. табл.7.4). Применяем двойственный симплекс-метод.
Полученное решение, оптимальное относительно второго отсечения, дано в табл. 7.5.
Таблица 7.5
Базис |
А0 |
А1 |
А2 |
А3 |
А4 |
А5 |
А6 |
А7 |
А8 |
j |
8,0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 | |
А2 |
0 |
1 |
0 |
1 |
0 |
0 |
- |
0 | |
А3 |
0 |
0 |
1 |
0 |
0 |
0 |
0 | ||
А1 |
1 |
0 |
0 |
- |
0 |
0 |
0 | ||
А5 |
0 |
0 |
0 |
1 |
0 |
- |
0 | ||
А6 |
0 |
0 |
0 |
0 |
0 |
1 |
- |
0 | |
А8 |
- |
0 |
0 |
0 |
- |
0 |
0 |
- |
1 |
Очевидно, что оно не удовлетворяет требованию целочисленности. Так как в базисное решение вернулась переменная x6, что означает строгое выполнение 1-го условия отсечения, соответствующие ей строка и столбец удаляются (отмечены выделением пунктирной полосой).
Теперь отсечение строим по переменной x1:
х1- х4+х7 = х4+х7 х4+х7 – х8 = .
Д
Таблица
7.6 Базис А0 L 8,
0 А2 6 А3 5 А1 1 А5 5 А4 1
Из опыта применения рассмотренного алгоритма можно сделать некоторые выводы. Хотя Гомори теоретически доказал, что алгоритм сходится за конечное число шагов, оценки необходимого числа итераций не существует. К сожалению, скорость сходимости алгоритма очень низкая. Встречались примеры с 10-15 переменными, решение которых требовало более тысячи итераций. Попытка вводить отсечение сразу по нескольким переменным не дает ощутимого эффекта.
Отмечается зависимость скорости сходимости от формы и порядка записи условий задачи, существенное влияние ошибок округления. Неприятной стороной алгоритма является постоянное увеличение числа строк вплоть до числа переменных в канонической форме. Если задача разрешима, алгоритм находит целочисленное решение только на последней итерации. Поэтому в случае прерывания расчета не будет получено ни одного даже приемлемого решения.
Эффективность алгоритма повышается с уменьшением значенийаij иbi и заполненности матрицы условийА. Можно рекомендовать применение метода для задач небольшой размерности (до десятков переменных), когда значенияаij иbiневелики и в оптимальном решении непрерывной задачи большая часть переменных имеет целые значения. Алгоритм мало пригоден для решения комбинаторных задач в целочисленной постановке.
Для других вариантов построения условий отсечения сходимость построенных на них алгоритмов не доказана, а отмеченные недостатки в основном не устраняются. Эти замечания относятся и к алгоритму отсечения для частично целочисленных задач.
В ряде пакетов прикладных программ метод отсечений применяется в комбинации с другими, точными или приближенными, методами.