В математической оптимизации симплексный алгоритм Данцига ( или симплексный метод ) является популярным алгоритмом линейного программирования . [ 1]
Название алгоритма происходит от концепции симплекса и было предложено Т. С. Моцкиным . [2] Симплексы фактически не используются в этом методе, но одна из его интерпретаций заключается в том, что он работает с симплициальными конусами , и они становятся собственными симплексами с дополнительным ограничением. [3] [4] [5] [6] Рассматриваемые симплициальные конусы являются углами (т. е. окрестностями вершин) геометрического объекта, называемого многогранником . Форма этого многогранника определяется ограничениями , применяемыми к целевой функции.
Джордж Данциг работал над методами планирования для ВВС США во время Второй мировой войны, используя настольный калькулятор . В 1946 году его коллега бросил ему вызов, поставив задачу механизировать процесс планирования, чтобы отвлечь его от другой работы. Данциг сформулировал проблему как линейные неравенства, вдохновленные работой Василия Леонтьева , однако в то время он не включил цель в свою формулировку. Без цели может быть осуществимо огромное количество решений, и поэтому для поиска «наилучшего» осуществимого решения необходимо использовать военные «основные правила», описывающие, как можно достичь целей, а не указывать саму цель. Основная идея Данцига заключалась в том, чтобы понять, что большинство таких основных правил можно перевести в линейную целевую функцию, которую необходимо максимизировать. [7] Разработка симплекс-метода была эволюционной и происходила в течение примерно года. [8]
После того, как Данциг включил целевую функцию как часть своей формулировки в середине 1947 года, задача стала математически более податливой. Данциг понял, что одна из нерешенных задач, которую он ошибочно принял за домашнее задание на занятиях своего профессора Ежи Неймана (и которая впоследствии была фактически решена), была применима к поиску алгоритма для линейных программ. Эта задача включала в себя поиск существования множителей Лагранжа для общих линейных программ над континуумом переменных, каждая из которых ограничена между нулем и единицей, и удовлетворяющих линейным ограничениям, выраженным в форме интегралов Лебега . Позже Данциг опубликовал свое «домашнее задание» в качестве диссертации, чтобы получить докторскую степень. Геометрия столбцов, использованная в этой диссертации, дала Данцигу понимание, которое заставило его поверить, что метод симплекса будет очень эффективным. [9]
Симплексный алгоритм работает с линейными программами в канонической форме
с коэффициентами целевой функции, — транспонированная матрица , — переменные задачи, — матрица p × n , и . Существует простой процесс преобразования любой линейной программы в стандартную форму, поэтому использование этой формы линейных программ не приводит к потере общности.
В геометрических терминах допустимая область , определяемая всеми значениями такими, что и является (возможно, неограниченным) выпуклым многогранником . Крайняя точка или вершина этого многогранника известна как базисное допустимое решение (BFS).
Можно показать, что для линейной программы в стандартной форме, если целевая функция имеет максимальное значение в допустимой области, то она имеет это значение в (по крайней мере) одной из крайних точек. [10] Это само по себе сводит задачу к конечному вычислению, поскольку существует конечное число крайних точек, но число крайних точек неуправляемо велико для всех, кроме самых маленьких линейных программ. [11]
Можно также показать, что если экстремальная точка не является точкой максимума целевой функции, то существует ребро, содержащее точку, так что значение целевой функции строго возрастает на ребре, удаляясь от точки. [12] Если ребро конечно, то ребро соединяется с другой экстремальной точкой, где целевая функция имеет большее значение, в противном случае целевая функция неограничена сверху на ребре, и линейная программа не имеет решения. Симплексный алгоритм применяет это понимание, проходя по ребрам многогранника к экстремальным точкам с все большими и большими целевыми значениями. Это продолжается до тех пор, пока не будет достигнуто максимальное значение или не будет посещено неограниченное ребро (что приводит к выводу, что задача не имеет решения). Алгоритм всегда завершается, потому что число вершин в многограннике конечно; более того, поскольку мы прыгаем между вершинами всегда в одном и том же направлении (направлении целевой функции), мы надеемся, что число посещенных вершин будет небольшим. [12]
Решение линейной программы выполняется в два этапа. На первом этапе, известном как Фаза I, находится начальная экстремальная точка. В зависимости от характера программы это может быть тривиально, но в общем случае это может быть решено путем применения симплекс-алгоритма к измененной версии исходной программы. Возможные результаты Фазы I заключаются либо в том, что найдено базовое допустимое решение, либо в том, что допустимая область пуста. В последнем случае линейная программа называется недопустимой . На втором этапе, Фазе II, симплекс-алгоритм применяется с использованием базового допустимого решения, найденного на Фазе I, в качестве отправной точки. Возможные результаты Фазы II — либо оптимальное базовое допустимое решение, либо бесконечное ребро, на котором целевая функция неограничена сверху. [13] [14] [15]
Преобразование линейной программы в программу стандартной формы может быть выполнено следующим образом. [16] Во-первых, для каждой переменной с нижней границей, отличной от 0, вводится новая переменная, представляющая разницу между переменной и границей. Затем исходная переменная может быть исключена путем подстановки. Например, учитывая ограничение
новая переменная, , вводится с
Второе уравнение может быть использовано для исключения из линейной программы. Таким образом, все ограничения нижней границы могут быть изменены на ограничения неотрицательности.
Во-вторых, для каждого оставшегося ограничения неравенства вводится новая переменная, называемая переменной-расслаблением , чтобы изменить ограничение на ограничение равенства. Эта переменная представляет собой разницу между двумя сторонами неравенства и предполагается неотрицательной. Например, неравенства
заменяются на
Гораздо проще выполнять алгебраические манипуляции с неравенствами в этой форме. В неравенствах, где появляется ≥, таких как второе, некоторые авторы называют переменную, введенную какизбыточная переменная .
В-третьих, каждая неограниченная переменная исключается из линейной программы. Это можно сделать двумя способами: один — решить для переменной одно из уравнений, в котором она появляется, а затем исключить переменную путем подстановки. Другой — заменить переменную разностью двух ограниченных переменных. Например, если неограниченно, то запишите
Уравнение можно использовать для исключения из линейной программы.
Когда этот процесс будет завершен, допустимая область будет иметь вид
Также полезно предположить, что ранг равен числу строк. Это не приводит к потере общности, поскольку в противном случае либо система имеет избыточные уравнения, которые можно отбросить, либо система несогласованна и линейное программирование не имеет решения. [17]
Линейную программу в стандартной форме можно представить в виде таблицы вида
Первая строка определяет целевую функцию, а остальные строки указывают ограничения. Ноль в первом столбце представляет собой нулевой вектор той же размерности, что и вектор (разные авторы используют разные соглашения относительно точной компоновки). Если столбцы из можно переставить так, чтобы они содержали единичную матрицу порядка (количество строк в ), то говорят, что таблица находится в канонической форме . [18] Переменные, соответствующие столбцам единичной матрицы, называются базовыми переменными, а остальные переменные называются небазовыми или свободными переменными . Если значения небазовых переменных установлены в 0, то значения базовых переменных легко получить как записи в , и это решение является базовым допустимым решением. Алгебраическая интерпретация здесь заключается в том, что коэффициенты линейного уравнения, представленного каждой строкой, являются либо , , либо некоторым другим числом. Каждая строка будет иметь столбец со значением , столбцы с коэффициентами , а оставшиеся столбцы с некоторыми другими коэффициентами (эти другие переменные представляют наши небазовые переменные). Устанавливая значения небазовых переменных равными нулю, мы гарантируем, что в каждой строке значение переменной, представленной a в ее столбце, равно значению в этой строке.
Наоборот, при наличии базового допустимого решения столбцы, соответствующие ненулевым переменным, могут быть расширены до невырожденной матрицы. Если соответствующую таблицу умножить на обратную этой матрице, то результатом будет таблица в канонической форме. [19]
Позволять
быть таблицей в канонической форме. Дополнительные преобразования сложения строк могут быть применены для удаления коэффициентов cТ
Б из целевой функции. Этот процесс называется ценообразованием и приводит к канонической таблице
где z B — значение целевой функции при соответствующем базовом допустимом решении. Обновленные коэффициенты, также известные как коэффициенты относительной стоимости , представляют собой скорости изменения целевой функции по отношению к небазисным переменным. [14]
Геометрическая операция перехода от базового допустимого решения к смежному базовому допустимому решению реализуется как операция поворота . Сначала в небазовом столбце выбирается ненулевой опорный элемент . Строка, содержащая этот элемент, умножается на его обратную величину, чтобы изменить этот элемент на 1, а затем кратные этой строки добавляются к другим строкам, чтобы изменить другие записи в столбце на 0. Результатом является то, что если опорный элемент находится в строке r , то столбец становится r -ым столбцом матрицы тождества. Переменная для этого столбца теперь является базовой переменной, заменяя переменную, которая соответствовала r -ому столбцу матрицы тождества до операции. По сути, переменная, соответствующая опорному столбцу, входит в набор базовых переменных и называется входящей переменной , а заменяемая переменная покидает набор базовых переменных и называется выходящей переменной . Таблица по-прежнему находится в канонической форме, но с набором базовых переменных, измененным на один элемент. [13] [14]
Пусть линейная программа задана канонической таблицей. Симплексный алгоритм выполняется путем выполнения последовательных операций поворота, каждая из которых дает улучшенное базовое допустимое решение; выбор элемента поворота на каждом шаге в значительной степени определяется требованием, чтобы этот поворот улучшал решение.
Поскольку входящая переменная, в общем случае, будет увеличиваться от 0 до положительного числа, значение целевой функции уменьшится, если производная целевой функции по этой переменной отрицательна. Эквивалентно, значение целевой функции увеличится, если опорный столбец будет выбран так, что соответствующая запись в целевой строке таблицы будет положительной.
Если имеется более одного столбца, так что запись в целевой строке положительна, то выбор того, какую из них добавить к набору базовых переменных, является несколько произвольным, и было разработано несколько правил выбора входящих переменных [20], таких как алгоритм Devex [21] .
Если все записи в строке цели меньше или равны 0, то выбор входной переменной невозможен, и решение фактически является оптимальным. Легко видеть, что оно является оптимальным, поскольку строка цели теперь соответствует уравнению вида
Изменяя правило выбора входящей переменной таким образом, чтобы оно выбирало столбец, в котором запись в целевой строке отрицательна, алгоритм изменяется таким образом, что он находит минимум целевой функции, а не максимум.
После выбора столбца-сводки выбор строки-сводки во многом определяется требованием, чтобы полученное решение было осуществимым. Во-первых, рассматриваются только положительные записи в столбце-сводке, поскольку это гарантирует, что значение входящей переменной будет неотрицательным. Если в столбце-сводке нет положительных записей, то входящая переменная может принимать любое неотрицательное значение, при этом решение остается осуществимым. В этом случае целевая функция не ограничена снизу и минимума нет.
Далее, опорная строка должна быть выбрана так, чтобы все остальные базовые переменные оставались положительными. Расчет показывает, что это происходит, когда результирующее значение входящей переменной минимально. Другими словами, если опорная колонка — c , то опорная строка r выбирается так, чтобы
является минимумом по всем r, таким образом, что a rc > 0. Это называется тестом минимального отношения . [20] Если есть более одной строки, для которой достигается минимум, то для определения можно использовать правило выбора отбрасываемой переменной [22] .
Рассмотрим линейную программу
С добавлением дополнительных переменных s и t это представляется канонической таблицей
где столбцы 5 и 6 представляют собой основные переменные s и t , а соответствующее основное допустимое решение —
Столбцы 2, 3 и 4 могут быть выбраны в качестве опорных столбцов, для этого примера выбран столбец 4. Значения z , полученные в результате выбора строк 2 и 3 в качестве опорных, составляют 10/1 = 10 и 15/3 = 5 соответственно. Из них минимум равен 5, поэтому строка 3 должна быть опорной. Выполнение опорного столбца дает
Теперь столбцы 4 и 5 представляют основные переменные z и s , а соответствующее основное допустимое решение —
Для следующего шага в строке цели нет положительных записей и фактически
поэтому минимальное значение Z равно −20.
В общем случае линейная программа не будет задана в канонической форме, и эквивалентная каноническая таблица должна быть найдена до того, как симплексный алгоритм сможет начать работу. Это можно сделать путем введения искусственных переменных . Столбцы матрицы тождества добавляются как векторы столбцов для этих переменных. Если значение b для уравнения ограничений отрицательно, уравнение отрицается перед добавлением столбцов матрицы тождества. Это не меняет набор допустимых решений или оптимальное решение и гарантирует, что резервные переменные будут составлять начальное допустимое решение. Новая таблица находится в канонической форме, но она не эквивалентна исходной задаче. Поэтому вводится новая целевая функция, равная сумме искусственных переменных, и симплексный алгоритм применяется для поиска минимума; модифицированная линейная программа называется задачей фазы I. [23]
Симплексный алгоритм, примененный к задаче Фазы I, должен завершиться минимальным значением для новой целевой функции, поскольку, будучи суммой неотрицательных переменных, ее значение ограничено снизу 0. Если минимум равен 0, то искусственные переменные могут быть исключены из результирующей канонической таблицы, создавая каноническую таблицу, эквивалентную исходной задаче. Затем симплексный алгоритм может быть применен для поиска решения; этот шаг называется Фаза II . Если минимум положителен, то нет допустимого решения для задачи Фазы I, где все искусственные переменные равны нулю. Это означает, что допустимая область для исходной задачи пуста, и поэтому исходная задача не имеет решения. [13] [14] [24]
Рассмотрим линейную программу
Это представлено (неканонической) таблицей
Введем искусственные переменные u и v и целевую функцию W = u + v , что даст новую таблицу
Уравнение, определяющее исходную целевую функцию, сохраняется в ожидании Фазы II.
По построению, u и v являются базовыми переменными, поскольку они являются частью исходной матрицы идентичности. Однако целевая функция W в настоящее время предполагает, что u и v оба равны 0. Чтобы настроить целевую функцию так, чтобы она имела правильное значение, где u = 10 и v = 15, добавьте третью и четвертую строки к первой строке, что даст
Выберите столбец 5 в качестве опорного столбца, поэтому опорной строкой должна быть строка 4, а обновленная таблица будет иметь вид
Теперь выберите столбец 3 в качестве опорного столбца, для которого строка 3 должна быть опорной строкой, чтобы получить
Искусственные переменные теперь равны 0 и их можно отбросить, получив каноническую таблицу, эквивалентную исходной задаче:
К счастью, это уже оптимально, а оптимальное значение для исходной линейной программы составляет −130/7.
Форма таблицы, использованная выше для описания алгоритма, допускает непосредственную реализацию, в которой таблица поддерживается как прямоугольный массив ( m + 1) на ( m + n + 1). Легко избежать хранения m явных столбцов матрицы тождественности, которые будут встречаться в таблице, в силу того, что B является подмножеством столбцов [ A , I ]. Такая реализация называется « стандартным симплексным алгоритмом». Накладные расходы на хранение и вычисления таковы, что стандартный симплексный метод является непомерно дорогим подходом к решению больших задач линейного программирования.
В каждой симплексной итерации требуются только данные первой строки таблицы, (основного) столбца таблицы, соответствующего входящей переменной, и правой стороны. Последняя может быть обновлена с использованием опорного столбца, а первая строка таблицы может быть обновлена с использованием (основной) строки, соответствующей выходящей переменной. Как опорный столбец, так и опорная строка могут быть вычислены напрямую с использованием решений линейных систем уравнений, включающих матрицу B и произведение матрицы и вектора с использованием A. Эти наблюдения мотивируют « пересмотренный симплексный алгоритм », для которого реализации отличаются обратимым представлением B. [25 ]
В больших задачах линейного программирования A обычно является разреженной матрицей , и когда полученная разреженность B используется при сохранении ее обратимого представления, пересмотренный симплексный алгоритм гораздо эффективнее стандартного симплексного метода. Коммерческие симплексные решатели основаны на пересмотренном симплексном алгоритме. [24] [25] [26] [27] [28]
Если значения всех базовых переменных строго положительны, то поворот должен привести к улучшению целевого значения. Когда это всегда так, ни один набор базовых переменных не встречается дважды, и симплексный алгоритм должен завершиться после конечного числа шагов. Базовые допустимые решения, где хотя бы одна из базовых переменных равна нулю, называются вырожденными и могут приводить к поворотам, для которых нет улучшения целевого значения. В этом случае нет фактического изменения решения, а есть только изменение набора базовых переменных. Когда несколько таких поворотов происходят подряд, улучшения нет; в крупных промышленных приложениях вырождение является обычным явлением, и такое « застревание » заметно. Хуже застревания — возможность того, что один и тот же набор базовых переменных встречается дважды, и в этом случае детерминированные правила поворота симплексного алгоритма приведут к бесконечному циклу или «циклу». Хотя вырождение является правилом на практике, а застревание — обычным явлением, цикличность на практике встречается редко. Обсуждение примера практической цикличности приводится в Padberg . [24] Правило Бланда предотвращает цикличность и, таким образом, гарантирует, что симплексный алгоритм всегда завершается. [24] [29] [30] Другой поворотный алгоритм, алгоритм крест-накрест, никогда не зацикливается на линейных программах. [31]
Правила поворота на основе истории, такие как правило Заде и правило Каннингема, также пытаются обойти проблему застопоривания и зацикливания, отслеживая, как часто используются определенные переменные, а затем отдавая предпочтение тем переменным, которые использовались реже всего.
Симплексный метод на практике оказался исключительно эффективным и стал большим улучшением по сравнению с более ранними методами, такими как исключение Фурье–Моцкина . Однако в 1972 году Клее и Минти [32] привели пример, куб Клее–Минти , показывающий, что наихудшая сложность симплексного метода, сформулированная Данцигом, составляет экспоненциальное время . С тех пор для почти каждой вариации метода было показано, что существует семейство линейных программ, для которых он работает плохо. Остается открытым вопрос, существует ли вариация с полиномиальным временем , хотя известны субэкспоненциальные правила поворота. [33]
В 2014 году было доказано [ требуется ссылка ] , что конкретный вариант симплексного метода является NP-мощным, т. е. его можно использовать для решения с полиномиальными накладными расходами любой проблемы в NP неявно во время выполнения алгоритма. Более того, решение о том, входит ли заданная переменная в базис во время выполнения алгоритма на заданном входе, и определение количества итераций, необходимых для решения заданной задачи, являются NP-трудными задачами. [34] Примерно в то же время было показано, что существует искусственное правило поворота, для которого вычисление его выходных данных является PSPACE-полным . [35] В 2015 году это было усилено, чтобы показать, что вычисление выходных данных правила поворота Данцига является PSPACE-полным . [36]
Анализ и количественная оценка наблюдения, что симплексный алгоритм эффективен на практике, несмотря на его экспоненциальную сложность в худшем случае, привели к разработке других мер сложности. Симплексный алгоритм имеет полиномиальную сложность в среднем случае при различных распределениях вероятностей , с точной производительностью в среднем случае симплексного алгоритма, зависящей от выбора распределения вероятностей для случайных матриц . [37] [38] Другой подход к изучению « типичных явлений » использует теорию категорий Бэра из общей топологии , и показывает, что (топологически) «большинство» матриц могут быть решены симплексным алгоритмом за полиномиальное число шагов. [ требуется ссылка ]
Другой метод анализа производительности симплексного алгоритма изучает поведение наихудших сценариев при малых возмущениях — являются ли наихудшие сценарии стабильными при малых изменениях (в смысле структурной устойчивости ) или они становятся управляемыми? Эта область исследований, называемая сглаженным анализом , была введена специально для изучения симплексного метода. Действительно, время выполнения симплексного метода на входе с шумом является полиномиальным по числу переменных и величине возмущений. [39] [40]
Другие алгоритмы для решения задач линейного программирования описаны в статье о линейном программировании . Другой алгоритм поворота с заменой базиса — это алгоритм крест-накрест . [41] [42] Существуют алгоритмы с полиномиальным временем для линейного программирования, которые используют методы внутренних точек: к ним относятся эллипсоидальный алгоритм Хачияна , проективный алгоритм Кармаркара и алгоритмы следования по пути . [15] Метод Big-M — это альтернативная стратегия для решения линейной программы с использованием однофазного симплекса.
Дробно-линейное программирование (ДЛП) является обобщением линейного программирования (ЛП). В ДЛП целевая функция является линейной функцией , в то время как целевая функция дробно-линейной программы является отношением двух линейных функций. Другими словами, линейная программа является дробно-линейной программой, в которой знаменатель является постоянной функцией, имеющей значение один везде. Дробно-линейное программирование может быть решено с помощью варианта симплексного алгоритма [43] [44] [45] [46] или с помощью алгоритма крест-накрест . [47]
Эти введения написаны для студентов, изучающих информатику и исследование операций :