- •Глава 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невелики и в оптимальном решении непрерывной задачи большая часть переменных имеет целые значения. Алгоритм мало пригоден для решения комбинаторных задач в целочисленной постановке.
Для других вариантов построения условий отсечения сходимость построенных на них алгоритмов не доказана, а отмеченные недостатки в основном не устраняются. Эти замечания относятся и к алгоритму отсечения для частично целочисленных задач.
В ряде пакетов прикладных программ метод отсечений применяется в комбинации с другими, точными или приближенными, методами.

Базис