Разложение Данцига — Вулфа

Материал из testwiki
Перейти к навигации Перейти к поиску

Метод декомпозиции Данцига — Вулфа представляет собой специализированный вариант симплекс-метода.

В 1960 г. Джордж Данциг и Шаблон:Нп4 разработали метод декомпозиции для решения задач высокой размерности со специальной структурой матрицы ограничений[1].

Этот метод оказался наиболее эффективным для решения задач, матрица ограничений которых имеет блочно-диагональный вид с небольшим числом переменных. Однако, как показали дальнейшие исследования, метод применим также и для задач линейного программирования с матрицей общего вида. Соответствующий метод предложен Д. Б. Юдиным и Э. Г. Гольштейном и называется блочным программированием.

Отличительной особенностью метода декомпозиции является использование координирующей задачи, которая имеет, по сравнению с исходной, небольшое число строк и большое число столбцов.

Метод генерации столбцов

Существенным является то, что для решения координирующей задачи не требуется задания всех столбцов в явном виде. Они генерируются в процессе использования симплекс-метода. Такой подход называют методом генерации столбцов.

Достаточно уметь генерировать столбец и иметь процедуру, выбирающую столбец для ввода в базис.

Часто такая процедура сводится к решению определенной подзадачи (не обязательно линейного программирования).

Принцип декомпозиции

Лемма Пусть R - непустое замкнутое ограниченное множество в евклидовом пространстве и обладает конечным числом K крайних точек, которые здесь будут обозначаться zk=1:K. Тогда любая точка z множества R может быть представлена в виде выпуклой комбинации крайних точек множества R, т.е. для z найдутся неотрицательные числа δk с общей суммой единица (k=1Kδm=1) и такие, что

(1) z=k=1Kδkzk.

Пусть поставлена задача

Максимизировать

(2) c[N]x[N]

при ограничениях

(3) A[M1,N]x[N]=b[M1]

(4) A[M2,N]x[N]=b[M2]

(5) x[N]0[N]

Ограничения (3) задают симплекс S, пусть z[K] - его крайние точки.

Пусть x – допустимое решение По лемме x=z[N,K]δ[K]

Подставим последнее выражение в (2) и (3).

Задача примет вид

Максимизировать (6) (c[N]z[N,K])δ[K]=g[K]δ[K]

при ограничениях

(7) (A[M1,N]z[N,K])δ[K]=D[M1,K]δ[K]=b[M1]

(8) δ[K]1[K]=1.

Эта задача эквивалентна исходной (2)-(5) и называется координирующей задачей.

Она имеет только |M1|+1 строк ограничений по сравнению с |M1|+|M2| строками исходной задачи, и очень большое число столбцов |K|, равное числу крайних точек множества S. Чтобы не хранить все эти столбцы в памяти ЭВМ, будем получать их по мере необходимости, пользуясь методом генерации столбцов.

Алгоритм

Решаем задачу (6)-(8) симплекс-методом с использованием метода генерации столбцов.

Для простоты предположим, что уже известно некоторое допустимое базисное решение.

Обозначим через δ ограничение (8), тогда двойственные переменные - это вектор d[M1δ].

Для ввода в базис необходимо найти z[N,m], такой, что

d[M1]D[M1,K]+d[δ]<g[m]

Таким образом достаточно найти m, на котором достигается минимум

(9) d[M1]A[M1,N]z[N,m]+d[δ]c[N]z[N,m]

что эквивалентно решению задачи

минимизировать (10) (d[M1]A[M1,N]c[N])x[N])

при ограничениях (4) и (5).

Если найденный минимум не будет больше d[δ], задача решена.

В противном случае столбец D[M1,k], соответствующий найденному решению, вводим в базис.

Блочные задачи

Пусть ограничения (4) имеют блочную структуру

(A[M1,N1]0[M1,N2]0[M1,Nn]0[M2,N1]A[M2,N2]0[M2,Nn]0[Mn,N1]0[Mn,N2]A[Mn,Nn])

Задача (10),(4),(5) распадается на отдельные подзадачи

Найти минимум

(11) (d[Mk]A[Mk,Nk]c[Nk])z[Nk]+d[δ]

при условиях

(12) A[Mk,Nk]z[Nk]=b[Mk]

Примечания

Шаблон:Примечания

Литература

Шаблон:Методы оптимизации Шаблон:Rq