Задача целочисленного программирования — это математическая программа оптимизации или осуществимости , в которой некоторые или все переменные ограничены целыми числами . Во многих случаях этот термин относится к целочисленному линейному программированию (ILP), в котором целевая функция и ограничения (кроме целочисленных ограничений) являются линейными .
Целочисленное программирование является NP-полным . В частности, особый случай 0–1 целочисленного линейного программирования, в котором неизвестные являются бинарными, и только ограничения должны быть удовлетворены, является одной из 21 NP-полных задач Карпа . [1]
Если некоторые переменные решения не являются дискретными, то проблема известна как задача смешанно-целочисленного программирования . [2]
В целочисленном линейном программировании каноническая форма отличается от стандартной формы . Целочисленная линейная программа в канонической форме выражается следующим образом (обратите внимание, что это вектор, который должен быть определен): [3]
и ILP в стандартной форме выражается как
где — векторы, а — матрица. Как и в случае с линейными программами, ILP, не имеющие стандартной формы, можно преобразовать в стандартную форму , исключив неравенства, введя переменные-слэк ( ) и заменив переменные, не имеющие знаковых ограничений, разностью двух переменных с знаковыми ограничениями.
График справа демонстрирует следующую проблему.
Допустимые целочисленные точки показаны красным цветом, а красные пунктирные линии указывают на их выпуклую оболочку, которая является наименьшим выпуклым многогранником, содержащим все эти точки. Синие линии вместе с осями координат определяют многогранник релаксации LP, который задан неравенствами без ограничения целочисленности. Цель оптимизации — переместить черную пунктирную линию как можно выше, все еще касаясь многогранника. Оптимальными решениями целочисленной задачи являются точки , и обе имеют целевое значение 2. Единственный оптимум релаксации имеет целевое значение 2,8. Если решение релаксации округляется до ближайших целых чисел, оно невыполнимо для ILP.
Ниже приведено сокращение от минимального вершинного покрытия до целочисленного программирования, которое послужит доказательством NP-трудности.
Пусть — неориентированный граф. Определим линейную программу следующим образом:
Учитывая, что ограничения ограничиваются либо 0, либо 1, любое допустимое решение целочисленной программы является подмножеством вершин. Первое ограничение подразумевает, что по крайней мере одна конечная точка каждого ребра включена в это подмножество. Таким образом, решение описывает вершинное покрытие. Кроме того, если задано некоторое вершинное покрытие C, можно установить в 1 для любого и в 0 для любого, таким образом, давая нам допустимое решение целочисленной программы. Таким образом, мы можем заключить, что если мы минимизируем сумму, мы также нашли минимальное вершинное покрытие. [4]
Смешанно-целочисленное линейное программирование ( MILP ) включает в себя задачи, в которых только некоторые переменные, , ограничены целыми числами, в то время как другие переменные могут быть нецелыми числами.
Линейное программирование от нуля до единицы (или двоичное целочисленное программирование ) включает в себя задачи, в которых переменные ограничены либо 0, либо 1. Любая ограниченная целочисленная переменная может быть выражена как комбинация двоичных переменных . [5] Например, если задана целочисленная переменная, , переменная может быть выражена с помощью двоичных переменных:
Существуют две основные причины использования целочисленных переменных при моделировании задач в виде линейной программы:
Эти соображения часто встречаются на практике, поэтому целочисленное линейное программирование может использоваться во многих прикладных областях, некоторые из которых кратко описаны ниже.
Смешанно-целочисленное программирование имеет множество применений в промышленном производстве, включая моделирование рабочих мест. Один важный пример происходит в планировании сельскохозяйственного производства и включает определение урожайности для нескольких культур, которые могут совместно использовать ресурсы (например, землю, рабочую силу, капитал, семена, удобрения и т. д.). Возможная цель — максимизировать общее производство, не превышая доступные ресурсы. В некоторых случаях это можно выразить в терминах линейной программы, но переменные должны быть ограничены целыми числами.
Эти проблемы включают планирование обслуживания и транспортных средств в транспортных сетях. Например, проблема может включать назначение автобусов или метро на отдельные маршруты, чтобы можно было соблюдать расписание, а также снабдить их водителями. Здесь двоичные переменные решения указывают, назначен ли автобус или метро на маршрут и назначен ли водитель на конкретный поезд или метро. Метод программирования ноль-один был успешно применен для решения проблемы выбора проекта, в которой проекты являются взаимоисключающими и/или технологически взаимозависимыми. Он используется в особом случае целочисленного программирования, в котором все переменные решения являются целыми числами. Переменная может принимать только значения ноль или единица.
Проблемы территориального разбиения или районирования состоят в разбиении географического региона на районы для планирования некоторых операций с учетом различных критериев или ограничений. Некоторые требования для этой проблемы: смежность, компактность, баланс или равенство, уважение естественных границ и социально-экономическая однородность. Некоторые приложения для этого типа проблем включают: политическое районирование, школьное районирование, районирование служб здравоохранения и районирование управления отходами.
Цель этих задач — спроектировать сеть линий для установки таким образом, чтобы был выполнен предопределенный набор требований к связи, а общая стоимость сети была минимальной. [6] Для этого требуется оптимизировать как топологию сети, так и установить пропускную способность различных линий. Во многих случаях пропускная способность ограничена целыми числами. Обычно существуют, в зависимости от используемой технологии, дополнительные ограничения, которые можно смоделировать как линейные неравенства с целыми или двоичными переменными.
Задача частотного планирования в мобильных сетях GSM заключается в распределении доступных частот по антеннам таким образом, чтобы можно было обслуживать пользователей и минимизировать помехи между антеннами. [7] Эту задачу можно сформулировать как целочисленную линейную программу, в которой двоичные переменные указывают, назначена ли частота антенне.
Наивный способ решения ILP — просто убрать ограничение, что x — целое число, решить соответствующую LP (называемую релаксацией LP ILP), а затем округлить элементы решения до релаксации LP. Но это решение может быть не только не оптимальным, оно может быть даже невыполнимым; то есть оно может нарушать некоторые ограничения.
Хотя в общем случае решение релаксации LP не будет гарантированно целочисленным, если ILP имеет вид такой, что где и имеют все целочисленные элементы и полностью унимодулярно , то каждое базовое допустимое решение является целочисленным. Следовательно, решение, возвращаемое симплексным алгоритмом, гарантированно является целочисленным. Чтобы показать, что каждое базовое допустимое решение является целочисленным, пусть будет произвольным базовым допустимым решением . Поскольку является допустимым, мы знаем, что . Пусть будут элементами, соответствующими столбцам базиса для базового решения . По определению базиса существует некоторая квадратная подматрица с линейно независимыми столбцами, такая что .
Так как столбцы линейно независимы и квадратны, невырождены, и, следовательно, по предположению, унимодулярны и, следовательно , . Кроме того, так как невырождены, они обратимы и, следовательно , . По определению, . Здесь обозначает сопряженное число и является целым числом, поскольку является целым числом. Следовательно, Таким образом, если матрица ILP полностью унимодулярна, вместо использования алгоритма ILP можно использовать симплексный метод для решения релаксации LP, и решение будет целочисленным.
Когда матрица не полностью унимодулярна, существует множество алгоритмов, которые можно использовать для точного решения целочисленных линейных программ. Один класс алгоритмов — это методы плоскости отсечения , которые работают, решая релаксацию LP, а затем добавляя линейные ограничения, которые приводят решение к целочисленности, не исключая никаких целочисленных допустимых точек.
Другой класс алгоритмов — это варианты метода ветвей и границ . Например, метод ветвей и границ , который объединяет как методы ветвей и границ, так и методы секущей плоскости. Алгоритмы ветвей и границ имеют ряд преимуществ по сравнению с алгоритмами, которые используют только секущие плоскости. Одним из преимуществ является то, что алгоритмы могут быть прекращены на ранней стадии, и пока найдено хотя бы одно интегральное решение, может быть возвращено допустимое, хотя и не обязательно оптимальное, решение. Кроме того, решения релаксаций LP могут использоваться для предоставления худшей оценки того, насколько далеко от оптимальности возвращенное решение. Наконец, методы ветвей и границ могут использоваться для возврата нескольких оптимальных решений.
Предположим, что — целочисленная матрица размером m на n , а — целочисленный вектор размером m на 1. Мы сосредоточимся на проблеме осуществимости, которая заключается в том, чтобы решить, существует ли вектор размером n на 1, удовлетворяющий .
Пусть V будет максимальным абсолютным значением коэффициентов в и . Если n (число переменных) является фиксированной константой, то проблема осуществимости может быть решена за время, полиномиальное по m и log V . Это тривиально для случая n = 1. Случай n = 2 был решен в 1981 году Гербертом Скарфом . [13] Общий случай был решен в 1983 году Хендриком Ленстрой , объединившим идеи Ласло Ловаса и Петера ван Эмде Боаса . [14] Теорема Дуаньона утверждает, что целочисленная программа осуществима, когда каждое подмножество ограничений осуществимо; метод, объединяющий этот результат с алгоритмами для задач типа LP, может использоваться для решения целочисленных программ за время, которое является линейным по и поддающимся обработке с фиксированными параметрами (FPT) за , но, возможно, дважды экспоненциальным по , без зависимости от . [15]
В частном случае 0-1 ILP алгоритм Ленстры эквивалентен полному перебору: число всех возможных решений фиксировано (2 n ), и проверка осуществимости каждого решения может быть выполнена за время poly( m , log V ). В общем случае, когда каждая переменная может быть произвольным целым числом, полный перебор невозможен. Здесь алгоритм Ленстры использует идеи из Геометрии чисел . Он преобразует исходную задачу в эквивалентную со следующим свойством: либо существование решения очевидно, либо значение ( n -й переменной) принадлежит интервалу, длина которого ограничена функцией от n . В последнем случае задача сводится к ограниченному числу задач меньшей размерности. Сложность выполнения алгоритма была улучшена в несколько этапов:
Эти алгоритмы также могут быть использованы для смешанных целочисленных линейных программ (MILP) - программ, в которых некоторые переменные являются целыми числами, а некоторые - действительными. [23] Оригинальный алгоритм Ленстры [14] : Раздел 5 имеет время выполнения , где n - число целочисленных переменных, d - число непрерывных переменных, а L - размер двоичного кодирования проблемы. Используя методы из более поздних алгоритмов, фактор может быть улучшен до или до . [23]
Так как целочисленное линейное программирование является NP-трудным , многие примеры проблем являются неразрешимыми, и поэтому вместо этого должны использоваться эвристические методы. Например, поиск с табу может использоваться для поиска решений ILP. [24] Чтобы использовать поиск с табу для решения ILP, ходы могут быть определены как увеличение или уменьшение целочисленной ограниченной переменной допустимого решения при сохранении всех других целочисленных ограниченных переменных постоянными. Затем решаются неограниченные переменные. Кратковременная память может состоять из ранее опробованных решений, в то время как средневременная память может состоять из значений для целочисленных ограниченных переменных, которые привели к высоким объективным значениям (предполагая, что ILP является задачей максимизации). Наконец, долговременная память может направлять поиск к целочисленным значениям, которые ранее не были опробованы.
Другие эвристические методы, которые можно применять к ILP, включают:
Существует также множество других эвристик, специфичных для конкретных задач, например эвристика k-opt для задачи коммивояжера. Недостатком эвристических методов является то, что если они не находят решения, невозможно определить, является ли это следствием отсутствия допустимого решения или алгоритм просто не смог его найти. Кроме того, обычно невозможно количественно оценить, насколько близко к оптимальному решение, возвращаемое этими методами.
Часто бывает так, что матрица , определяющая целочисленную программу, является разреженной . В частности, это происходит, когда матрица имеет блочную структуру , что имеет место во многих приложениях. Разреженность матрицы можно измерить следующим образом. Граф имеет вершины , соответствующие столбцам , и два столбца образуют ребро, если имеет строку, в которой оба столбца имеют ненулевые элементы. Эквивалентно, вершины соответствуют переменным, и две переменные образуют ребро, если они разделяют неравенство. Мера разреженности является минимумом глубины дерева графика и глубины дерева графика транспонирования . Пусть будет числовой мерой , определенной как максимальное абсолютное значение любого элемента . Пусть будет числом переменных целочисленной программы. Затем в 2018 году [25] было показано , что целочисленное программирование может быть решено за сильно полиномиальное и фиксированно-параметрическое время, параметризованное и . То есть для некоторой вычислимой функции и некоторой константы целочисленное программирование может быть решено за время . В частности, время не зависит от правой части и целевой функции . Более того, в отличие от классического результата Ленстры, где число переменных является параметром, здесь число переменных является переменной частью ввода.