Введение

Метод оптимизации для решения (смешанных) целых линейных программ

В математической оптимизации метод секущих плоскостей – это любой из ряда методов оптимизации, которые итеративно уточняют допустимое множество или целевую функцию посредством линейных неравенств, называемых секущими плоскостями. Такие процедуры обычно используются для нахождения целочисленных решений задач смешанного целочисленного линейного программирования (MILP), а также для решения общих, не обязательно дифференцируемых, выпуклых задач оптимизации. Использование секущих плоскостей для решения MILP было введено Ральфом Э. Гомори. Методы секущих плоскостей для MILP работают путем решения нецелочисленной линейной программы, являющейся линейным релаксом исходной целочисленной программы. Теория линейного программирования утверждает, что при умеренных предположениях (если линейная программа имеет оптимальное решение и если допустимая область не содержит прямую линию), всегда можно найти крайнюю или угловую точку, являющуюся оптимальной. Полученное оптимальное решение проверяется на целочисленность. Если оно не является целочисленным, гарантированно существует линейное неравенство, отделяющее оптимальное решение от выпуклой оболочки истинного допустимого множества. Нахождение такого неравенства – это задача разделения, а само неравенство – секущая плоскость. Секущую плоскость можно добавить к релаксированной линейной программе. Тогда текущее нецелочисленное решение перестает быть допустимым для релаксации. Этот процесс повторяется до тех пор, пока не будет найдено оптимальное целочисленное решение. Методы секущих плоскостей для общей выпуклой непрерывной оптимизации и их варианты известны под различными названиями: метод Келли, метод Келли–Чейни–Голдштейна и методы пучков. Они широко используются для недифференцируемой выпуклой минимизации, где выпуклая целевая функция и ее субградиент могут быть эффективно вычислены, но обычные градиентные методы для дифференцируемой оптимизации неприменимы. Такая ситуация наиболее типична для вогнутой максимизации двойственных функций Лагранжа. Другая распространенная ситуация – применение декомпозиции Данцига–Вольфа к структурированной задаче оптимизации, в результате которой получаются формулировки с экспоненциальным числом переменных. Генерация этих переменных по требованию посредством отложенной генерации столбцов эквивалентна применению секущей плоскости к соответствующей двойственной задаче.

История

Расколотые плоскости были предложены Ральфом Гомори в 1950-х годах как метод решения задач целочисленного и смешанного целочисленного программирования. Однако большинство экспертов, включая самого Гомори, считали их непрактичными из-за численной неустойчивости, а также неэффективными, поскольку для продвижения к решению требовалось множество итераций добавления сечений. Ситуация изменилась в середине 1990-х годов, когда Жерар Корнюжоль и его коллеги показали их высокую эффективность в сочетании с методом ветвей и границ (известным как ветви и отсечения) и способами преодоления численной неустойчивости. В настоящее время все коммерческие решатели MILP используют сечения Гомори в той или иной форме. Сечения Гомори очень эффективно генерируются из симплекс-таблицы, в то время как выделение многих других типов сечений либо вычислительно затратно, либо даже NP-трудно. Среди других общих сечений для MILP, наиболее заметными являются методы "подъёма и проекции", которые превосходят сечения Гомори.

Общая идея

Метод заключается в том, что сначала снимается требование, чтобы значения xi были целыми числами, и решается соответствующая задача расслабленного линейного программирования для получения базисного допустимого решения. Геометрически, это решение будет вершиной выпуклого многогранника, состоящего из всех допустимых точек. Если эта вершина не является точкой с целыми координатами, то метод находит гиперплоскость, с одной стороны которой находится вершина, а с другой – все допустимые точки с целыми координатами. Затем это добавляется как дополнительное линейное ограничение для исключения найденной вершины, что приводит к модифицированной задаче линейного программирования. Новая задача затем решается, и процесс повторяется до тех пор, пока не будет найдено целочисленное решение.