Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Teoria_igr_i_issled_operatsy.doc
Скачиваний:
170
Добавлен:
07.06.2015
Размер:
5.21 Mб
Скачать

5.2. Комбинаторные методы решения задач целочисленного линейного программирования.

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

Общая схема метода ветвей и границ .

Рассмотрим вновь задачу дискретного программирования в виде

,   xХ

(5.1)

Если об этой задаче ничего неизвестно, то кроме как полного перебора для ее решения применить нельзя. Для ее решения методом ветвей и границ достаточно:

1. Уметь разбивать множество X(переобозначим его черезX0,1) на некоторые подмножестваX1,1, , X1,2, , X1,3 ,....Каждое из полученных подмножеств, в свою очередь, может быть разбито на подмножестваX2,1, X2,2, X2,3,..., и так далее, вплоть до получения одноэлементных подмножеств. Индексы (i,j) у подмножествXi,jозначают следующее:i– номер уровня разбиения,j–порядковый номер в уровне. В результате такого разбиения получается дерево подмножеств:

2. На каждом из таких подмножеств Xi,jуметь строить верхние оценки максимального значения функционала, т.е. определять значениеi,jтакое, что

i,j max{ (x) | xXi,j} .

(5. 4)

Алгоритм метода ветвей и границ.

0шаг. Полагаемx'– пустой элемент (в него пока ничего не помещено), Fx' =M=,. В дальнейшемx' будем называть рекордом,Fx' – рекордным значением функционала. Строим верхнюю оценку0,1функционала(x) на подмножествеX0,1, полагаемV=0,1(V– наименьшая из всех нижних оценок на всех подмножествах). Если в результате этого построения получаем некотороеxX0,1, тоx':=x, Fx':= (x), в противном случаеx'иFx'оставляем без изменения. ЕслиFx'=V, тоx'искомое решение иFx'– оптимальное значение функционала, в противном случае переходим к следующему шагу.

kый шаг. Среди всех подмножеств, не подвергнутых разбиению (на дереве разбиения они концевые), ищем подмножествоXr,t, у которого r,t=V.Разбиваем его на подмножестваXr+1,m+1, Xr+1,m+2, Xr+1,m+3,..., гдеm– номер последнего подмножества на (r+1)–ом уровне. Для каждого из этих подмножеств строим оценкиr+1,m+1, r+1,m+2, r+1,m+3,.... . Обычно эти оценки находятся пересчетом (уточнением) изr,t. Легко понять, что должно выполняться :

(r,t) (r+1,t) , t=m+1,m+2,m+3,... .

(5. 5)

Если в результате этих построений получаем некоторое xXr,t и (x)>Fx', тоx':=x, Fx':= (x). Отбраковываем все подмножестваXr,t, для которыхr,t Fx'.

Если в результате оказались отбракованными все подмножества, то x'иFx'дают искомое решение и алгоритм заканчивает работу. В противном случае полагаемV:=max(r,t), где максимум берется по всем неотбракованным и не подвергнутым разбиению подмножествам, и переходим к следующему шагу.

Замечание 1.Нетрудно видеть, что в работе алгоритма участвуют только подмножества, не подвергнутые разбиению (концевые вершины дерева разбиения), которые можно организовывать в виде списка. Если подмножество подвергается разбиению, то оно исключается из списка и заменяется своим разбиением.

Замечание 2.Если в исходной задаче функционал минимизируется, то строятся нижние оценкиr,t, т.е.r,tmax{ (x) | x Xr,t}, иM=+.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]