Перейти к основному содержимому

Подклассы линейной модели

Линейная модель в О2 разделена на три подкласса по типу допустимых значений переменных:

  • LP — непрерывное линейное программирование (linear programming);
  • IP — целочисленное линейное программирование (integer programming);
  • MIP — смешанно-целочисленное линейное программирование (mixed-integer programming).

Подкласс задаётся при создании модели. Он определяет, какие методы регистрации переменных доступны и какие алгоритмы применяет решатель. Структура линейных выражений и ограничений во всех трёх подклассах одинакова.

LP — непрерывное программирование​

Все переменные принимают вещественные значения в заданных границах. Применяется к задачам с делимыми величинами: объём сырья в килограммах или литрах, доля бюджета, доля смены, мощность установки.

Типовые задачи — задача о смесях, транспортная задача, портфельная оптимизация на линейных ограничениях, распределение производственной мощности.

LP — полиномиально разрешимая задача: время поиска оптимума растёт как полином от размера задачи. Базовый алгоритм — симплекс-метод. На задачах с большим числом переменных и ограничений применяется метод внутренней точки.

Найденное LP-решение гарантированно глобальное. Локальных оптимумов в задаче не существует — допустимая область выпукла.

Задачи с десятками тысяч переменных и ограничений практически решаемы. Они встречаются в промышленных задачах планирования и логистики (production planning, supply chain optimization).

IP — целочисленное программирование​

Все переменные принимают только целые значения в заданных границах. Применяется, когда дробные значения теряют прикладной смысл: число рейсов транспортных средств, количество единиц оборудования, число произведённых партий, число выполненных заказов.

IP принадлежит классу NP-трудных задач. Время доказательства оптимальности в худшем случае растёт экспоненциально от числа целочисленных переменных. На практике это означает: чистые IP-задачи на тысячах переменных требуют ограничения времени поиска и работы с подсказками. Доказательство оптимальности часто оказывается существенно дороже нахождения первого допустимого решения.

Базовый алгоритм для IP — метод ветвей и границ. На каждом шаге одна целочисленная переменная фиксируется в одном из своих допустимых значений, и задача распадается на подзадачи. Ветви, в которых вспомогательная LP-задача даёт оценку хуже уже найденного решения, отсекаются.

MIP — смешанно-целочисленное программирование​

В одной модели одновременно поддерживаются и непрерывные, и целочисленные, и булевы переменные. Это самый распространённый подкласс на практике.

Подавляющее большинство прикладных задач объединяет «делимые» количественные переменные (объёмы, доли, мощности) и «дискретные» решения «да/нет» (включить ли направление перевозок, открыть ли склад, активировать ли производственную линию).

Алгоритм поиска — метод ветвей и границ с LP-релаксацией. На каждом шаге целочисленные ограничения временно ослабляются: целочисленные переменные считаются непрерывными. Решается вспомогательная LP-задача, и её решение отсекает заведомо неперспективные ветви.

Качество LP-релаксации напрямую влияет на скорость поиска. Чем теснее релаксация к исходной задаче, тем меньше ветвей придётся перебрать.

Большинство промышленных задач планирования — production planning, lot-sizing, capacity planning, facility location — формулируется именно как смешанно-целочисленная линейная модель.

Релаксация и цена целочисленности​

LP-релаксация — основной мост между LP и IP/MIP. Её получают удалением требования целочисленности у всех переменных. Релаксация решается проще исходной задачи и даёт оценку для целочисленного оптимума:

  • для задачи минимизации — оптимум LP-релаксации служит нижней оценкой целочисленного минимума;
  • для задачи максимизации — верхней оценкой целочисленного максимума.

Иногда задача допускает естественное округление LP-решения к целочисленному без существенной потери качества. Это типично для задач с большими целочисленными значениями: тысячи единиц продукции, сотни тысяч рублей. В таких случаях целочисленные ограничения можно не вводить — это многократно ускоряет поиск.

Если же дискретный характер решения принципиально важен (выбор «да/нет», малые целочисленные значения), целочисленные ограничения сохраняются. Платой становится «цена целочисленности» — рост времени поиска.

Как выбрать подкласс​

Природа переменных задачиПодкласс
Все переменные — делимые количественные величины (объёмы, доли, мощности)LP
Все переменные — целые числа, дробные значения теряют смысл (число партий, число рейсов)IP
Часть переменных делимые, часть — целыеMIP
Присутствуют булевы переключатели «да/нет» (открыть ли, включить ли)MIP (или IP, если непрерывных переменных нет)

Если есть сомнения, какой подкласс выбрать, предпочтительнее MIP: он покрывает все три случая ценой более общего алгоритма поиска. На более узкий подкласс имеет смысл переходить, если профилирование показывает существенный выигрыш по времени.

Создание модели выбранного подкласса​

Подкласс модели задаётся выбором соответствующего фасада менеджера моделей:

Модель = О2
.Модели()
.ЛинейнаяНепрерывнаяМодель()
.СоздатьМодель();

Подробнее о способах создания объекта модели — в разделе Создание объекта модели. Полный список методов фасадов и их параметры — в разделе Программный интерфейс — Линейные модели.

См. также​