Автоматное программирование
- 1 year ago
- 0
- 0
Задача целочисленного программирования — это задача математической оптимизации или выполнимости , в которой некоторые или все переменные должны быть целыми числами . Часто термин адресуется к целочисленному линейному программированию (ЦЛП), в котором целевая функция и ограничения (за исключением требования целочисленности) линейны .
Целочисленное программирование является NP-трудной задачей . Частный случай 0-1 целочисленного линейного программирования, в котором переменные принимают значения только 0 или 1, является одной из 21 NP-полных задач Карпа .
Задача целочисленного линейного программирования в каноническом виде выражается как
максимизировать | |
при условиях | |
и | , |
а в стандартном виде
максимизировать | |
при условиях | |
и |
где — векторы, а — матрица, все элементы которых являются целыми числами. Заметьте, что, как и в случае линейного программирования, ЦЛП-задача, не находящаяся в стандартном виде, может быть приведена к стандартному виду путём исключения неравенств введением дополнительных и искусственных переменных и заменой переменных, на которые не наложено ограничение неотрицательности, двумя переменными.
Рисунок справа показывает следующую задачу.
Допустимые целые точки показаны красным и красные пунктирные линии показывают выпуклую оболочку этих точек, которая является наименьшим многоугольником, содержащим все эти точки. Синие линии вместе с координатными осями определяют многоугольник линейного ослабления, который задаётся неравенствами без требования целочисленности. Цель оптимизации — сдвинуть чёрную пунктирную линию так, чтобы она была как можно выше, но касалась многоугольника. Оптимальные решения целочисленной задачи — точки и , на которых целевая функция принимает значение 2. Единственное решение ослабленной (линейной) задачи — точка , в которой целевая функция принимает значение 2.8. Заметим, что если мы округлим решение задачи линейного программирования до ближайших целых, решение будет недопустимо для ЦЛП.
Следующее рассуждение является сведением задачи минимизации вершинного покрытия к задаче целочисленного программирования, что доказывает NP-трудность.
Пусть — неориентированный граф. Определим задачу линейного программирования следующим образом:
Если наложить требование, чтобы принимали значения 0 или 1, любое допустимое решение для целочисленного программирования является подмножеством вершин. Из первого ограничения следует, что по меньшей мере один конец каждого ребра включен в подмножество. Таким образом, решение даёт покрытие вершин. Кроме того, если задано вершинное покрытие C, можно присвоить значение 1 для любого и 0 для любого , что даёт нам допустимое решение задачи целочисленного программирования. Отсюда мы может заключить, что при минимизации суммы мы получим также минимальное вершинное покрытие .
В смешанном целочисленном линейном программировании (СЦЛП) только для части переменных требуется целочисленность, в то время как остальные переменные могут быть нецелочисленными.
В булевом программировании переменные должны принимать значения 0 или 1. Заметим, что любая ограниченная целочисленная переменная может быть выражена как комбинация булевых переменных . Например, если есть целочисленная переменная , её можно выразить через булевых переменных:
Есть две основные причины для использования целых переменных при моделировании задач линейного программирования:
Эти соглашения на практике встречаются часто и, таким образом, целочисленное линейное программирование может быть использовано во многих областях, некоторые из которых коротко освещены ниже.
Смешанное целочисленное программирование имеет много приложений в производстве, включая моделирование календарного планирования. Один из примеров встречается при в сельском хозяйстве для определения выхода продукции, которая может иметь общие ресурсы (такие как земля, труд, расходы, семена, удобрения и т.д.). Возможной целью оптимизации может быть максимизация дохода без выхода за границы имеющихся ресурсов. В некоторых случаях задача может быть выражена как задача линейного программирования, но переменные при этом должны быть целыми.
В этих задачах нужно обеспечить обслуживание и расписание работы транспортной сети. Например, задача может состоять в расстановке автобусов или поездов по маршрутам, чтобы соблюсти расписание, а также обеспечить подвижный состав водителями. Здесь булевы переменные (т.е. принимающее значение 0 или 1) определяют, назначен ли автобус или поезд на маршрут, и назначен ли водитель на конкретный автобус/поезд.
Целью этой задачи является построение сети передачи данных так, чтобы обеспечить предопределённые требования за минимальную цену . В этой задаче требуется оптимизация как топологии сети, так и пропускной возможности элементов сети. Во многих случаях пропускная способность выражается дискретными величинами, что приводит к целочисленным переменным. Обычно накладываются зависящие от применяемой технологии другие ограничения, которые могут моделироваться целочисленными или булевыми переменными.
Задача планирования частот в мобильных сетях GSM требует распределения допустимых частот по антеннам, чтобы обеспечить связь и минимизировать интерференцию между антеннами . Эту задачу можно сформулировать как задачу линейного программирования, в которой булевы переменные отражают, назначена ли конкретная частота конкретной антенне.
Наивный путь решения задачи ЦЛП — просто игнорировать ограничение целочисленности на переменные x , решить соответствующую задачу ЛП (которая называется задачи ЦЛП), а затем округлить компоненты решения полученной задачи. Однако полученное решение может оказаться не только не оптимальным, оно может оказаться даже недопустимым, то есть некоторые ограничения могут быть нарушены.
Хотя, в общем случае, целочисленность решения ослабленной задачи не гарантирована, если ЦЛП имеет вид при условиях , где и имеют в качестве элементов целые числа и является вполне унимодулярной , тогда любое базисное допустимое решение будет целочисленным. Следовательно, решение, которое даёт симплекс-метод , будет заведомо целочисленным . Чтобы показать, что любое базисное решение такой задачи целочисленно, пусть — произвольное допустимое решение. Поскольку допустимо, мы знаем, что . Пусть — элементы, соответствующие базисным столбцам базисного решения . По определению базиса существует некоторая квадратная подматрица матрицы с линейно независимыми столбцами, такая, что .
Поскольку столбцы линейно независимы и матрица квадратная, матрица неособенная, а потому при предположениях, что унимодулярна , выполняется . Поскольку не является особенной, матрица обратима, а потому . По определению, . Здесь означает союзную матрицу для и она целочисленна, поскольку целочисленна. Таким образом,
Таким образом, если матрица ЦЛП вполне унимодулярна, вместо решения задачи ЦЛП можно использовать линейное ослабление задачи, которое даст целочисленное решение.
Если матрица не является вполне унимодулярной, существует ряд алгоритмов, решающих задачу целочисленного линейного программирования точно. Один из классов таких алгоритмов — методы секущих плоскостей (методы Гомори), которые работают путём решения ослабленной линейной задачи с последующим добавлением линейных ограничений, которые отсекают нецелочисленное решение задачи без отсечения целочисленных допустимых решений.
Другой класс алгоритмов — варианты метода ветвей и границ . Например, , комбинирующий метод ветвей и границ с методами секущих плоскостей. Методы ветвей и границ имеют ряд преимуществ перед алгоритмами, использующими исключительно отсекающие плоскости. Одно из преимуществ — алгоритм можно завершить рано, как только хотя бы одно допустимое целочисленное решение найдено, хотя и не оптимальное. Кроме того, решение ослабленной линейной задачи может быть использовано для оценки, насколько далеко полученное от оптимального. Наконец, методы ветвей и границ можно использовать, чтобы получить несколько оптимальных решений.
Ленстра в 1983 показал , что в случае фиксированного числа переменных допустимое решение задачи целочисленного программирования может быть найдено за полиномиальное время.
Поскольку задачи целочисленного линейного программирования NP-трудны , многие задачи трудноразрешимы, поэтому применяются эвристические методы. Например, может быть использован поиск с запретами . Для использования поиска с запретами для решения задачи ЦЛП шаг алгоритма можно определить как увеличение или уменьшение целочисленной переменной, в то время как остальные целочисленные переменные остаются неизменными. Затем находится решение для переменных, на которых ограничение целочисленности не наложено. Для хранения предыдущих попыток может использоваться кратковременная память, в то время как более долговременная память может состоять из значений целочисленных переменных, для которых получены бо́льшие значения целевой функции (в предположении задачи максимизации). Наконец, долговременная память может быть использована для поиска целочисленных значений, которые ещё не проверены.
Другие эвристические методы, которые могут быть применены для решения ЦЛП
Есть также некоторые другие, зависящие от задачи эвристические методы, такие как k-opt эвристика для задачи коммивояжёра. Заметим, что недостатком эвристических методов является то, что в случае неудачи поиска решения метод не определяет, произошло это вследствие отсутствия допустимого решения, или из-за неспособности алгоритма его найти. Далее обычно невозможно определить, насколько близко к оптимальному полученное этим методом решение.