Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лр9)Метод ветвей и границ решения ЗЦЛП.doc
Скачиваний:
8
Добавлен:
30.08.2019
Размер:
558.59 Кб
Скачать

2.5. Решение задачи целочисленного линейного программирования методом ветвей и границ с помощью пакета qsb

Соответствующая программа запускается файлом intlprog.exe. Она решает как частично, так и полностью целочисленные задачи линейного программирования с числом переменных и ограничений до 20, используя метод ветвей и границ. В том числе решаются и задачи с булевыми переменными. По умолчанию все переменные неотрицательны. Программа позволяет ввести целочисленные границы для переменных , не включая их в общее число ограничений. По умолчанию нижняя граница 0, а верхняя 32000. Если необходимо установить нецелочисленные границы, их вводят, как обычные ограничения.

Если в задача имеется несколько оптимальных планов, из них находится только один. Информация о наличии множественного решения не выводится.

Режим 2 (ввод новой задачи) включает три этапа. На первом этапе осуществляют ввод информации о размерности задачи, направлении экстремизации и именах переменных (по умолчанию X1,X2,...,Xn).

На втором этапе необходимо определить, являются ли все переменные целочисленными, являются ли все переменные булевыми, и будут ли вводиться границы для переменных. При ответе «нет» на первый вопрос или «да» на третий, выводится таблица:

Установив I в столбце «Предел», на переменную накладывают ограничение целочисленности. В противном случае (С) - переменная может принимать и нецелые значения.

Значения границ округляются до целых. Если нижняя больше верхней, выдается сообщение об ошибке.

На третьем этапе вводятся коэффициенты при переменных и знаки в ограничениях.

В меню решений имеется возможность исправить целочисленную погрешность (по умолчанию она 0,001).

Решение задачи методом ветвей и границ не сопровождается графической иллюстрацией (изображением дерева) в программе, но здесь она приводится для пояснения алгоритма (рис.7).

Алгоритм метода ветвей и границ, реализованный в данной программе, несколько отличается от рассмотренного выше в методических указаниях и является менее эффективным в том смысле, что может потребовать большего числа итераций. Тем не менее, его полезно рассмотреть, чтобы наглядно проиллюстрировать разницу в подходах. Кроме того, во многих учебных пособиях применение метода ветвей и границ рассматривается именно на примере данной его модификации.

Основное различие заключается в том, что здесь на каждом этапе не выбирается наиболее «перспективное» подмножество. После того, как очередное подмножество разбито на две части, не подсчитывают сразу оценку обеих частей, а вместо этого каждая ветвь дерева последовательно рассматривается до конца. Исходная ОДП разбивается на подмножества по первой нецелочисленной переменной в оптимальном плане нецелочисленной задачи. Затем рассматривают ту вершину, которой соответствует знак , разбивают соответствующее подмножество так же, как и исходную ОДП, снова рассматривают ту вершину, которой соответствует знак , и т.д. до тех пор, пока не будет получен целочисленный план, или задача окажется неразрешимой. Только после этого возвращаются к рассмотрению вершин, которым соответствовал знак .

При этом на каждой итерации выводится информация о текущих целочисленных границах (определяющих рассматриваемое подмножество), оптимальном плане нецелочисленной задачи, о том, является ли он целочисленным, о значении целевой функции (ЦФ) на нем и о величинах ZL или ZU. Для задачи на максимум выводится значение нижней границы ZL, а на минимум верхней ZU. До тех пор, пока не найдено какое-нибудь целое решение, ZL =-1*1020, а ZU = 1*1020.

После нахождения целочисленного плана нельзя сразу судить о том, является ли он оптимальным, так как рассматривались не наиболее перспективные вершины. Но можно в уверенностью утверждать, что искомый максимум не меньше (а минимум не больше) значения целевой функции на целочисленном плане. Поэтому значения границ ZL и ZU изменяются (если только ранее не был найден целочисленный план с не меньшим (не большим) значением целевой функции).

Ветви с оценкой, меньшей ZL или большей ZU, не рассматриваются. План, соответствующий границе, запоминается. После того, как рассмотрены или исключены из рассмотрения все подмножества, этот план можно считать оптимальным.

Поясним это на примере (рис.7):

max 3х1 + 2х2

1 + 5х2 35

1 + 4х2 36

х1,2 0

х1,2 Z

На первой итерации найдено нецелочисленное решение Х=(2,353; 3,706). Вся ОДП (множество G) разбивается на два подмножества - G1 и G2 следующим образом:

G1={X G: х1 3}

G2={X G: х1 2}.

На второй итерации решают задачу на подмножестве G1. Полученное решение также нецелочисленно. Далее, вместо того, чтобы рассмотреть подмножество G2, продолжают рассматривать G1. В соответствующем плане выбирают первую по счету нецелочисленную компоненту (это х2) и разбивают G1 на G3 и G4. На третьей итерации рассматривают G3 - на этом подмножестве допустимых планов нет. Только после этого на четвертой итерации рассматривается вторая ветвь, выходящая из G1 - подмножество G4. Далее аналогично.

На пятой итерации на подмножестве G5 найдено целочисленное решение, которому соответствует значение целевой функции 12. На следующей итерации это значение присваивается величине ZL, которая до этого была равна -1*1020. Соответствующий план запоминается - он может оказаться оптимальным. Но на шестой итерации снова получен целочисленный план, целевая функция на котором равна 13 (больше 12) - ZL снова изменяется, запоминается новый план.

После этого, на седьмой итерации, переходят к рассмотрению подмножества G2, которое разбивают на G7 и G8.

На тринадцатой итерации (подмножество G14) снова найдено целочисленное решение Х=(0; 7), целевая функция на нем равна 14. Снова изменяется ZL и запоминается соответствующий план.

План, найденный на четырнадцатой итерации, также является целочисленным, но его не запоминают, так как 13<14 (ZL=14). План, найденный на пятнадцатой итерации, тоже, к сожалению, не запоминается, так как 14 14, а программа ставит своей целью найти хотя бы одно решение.

Наличие других оптимальных планов здесь игнорируется.

Таким образом, решение Х=(0; 7) получено за 15 итераций.

Отметим, что если бы использовался более эффективный вариант метода ветвей и границ, схема которого описана в методических указаниях, то после второй итерации произошел бы сразу переход к седьмой. В самом деле, если рассматривать значения целевой функции на соответствующих планах в качестве оценки подмножеств, то оценка G2 выше. Поэтому итерации с 3-ей по 6-ю оказываются лишними, и общее число итераций могло быть равно 11.

Для задачи с булевыми переменными алгоритм метода ветвей и границ будет тот же, но разбиение проводится по первой по счету переменной, значение которой не равно 0 или 1. На одном подмножестве эта переменная приравнивается 1 (эта ветвь рассматривается вначале), а на другом - нулю.

Следует отметить, что для таких задач разработан более эффективный алгоритм решения (так называемый аддитивный), также основанный на методе ветвей и границ. В нем обычно требуется меньшее число итераций, а кроме того, и расчеты на каждой итерации являются менее трудоемкими, не требуют применения симплекс-метода. Но в данном пакете этот алгоритм не реализован, он будет изучен позднее в другой лабораторной работе.

Рассмотрим решение задачи с булевыми переменными в данной программе на следующем примере:

max 4x1 + 2x2 - 5x3 - 2x4 + 3x5

x1 + x2 + x3 + 2x4 + x5 4

7x1 + 3x3 - 4x4 + 3x5 8

11x1 - 6x2 + 3x4 - 3x5 3

Ход решения (7 итераций) проиллюстрирован рисунком 8.

х4=1

1). Х=(1;1;0;0,5;0)

ЦФ=8

ZL=-1*1020

х4=0

2). Х=(1;0;0;1;1)

ЦФ=5

ZL=-1*1020

3). Х=(0,944;1;0;0;0,463)

ЦФ=7,166667

ZL=5

х1=1

х1=0

4). Х=(1;1;0;0;0,333)

ЦФ=7

ZL=5

7). ОДП=

х5=0

х5=1

6). Х=(1;1;0;0;0)

ЦФ=6

ZL=5

5). ОДП=

Рис.8

Возможности корректировки исходных данных в данной программе рекомендуется изучить самостоятельно.