О продукте

Комбинаторная и линейная оптимизация

Линейная / целочисленная оптимизация — это широко известный метод, который активно используется для решения различных задач. Комбинаторная оптимизация менее известна, поскольку этот метод требует серьёзных вычислительных ресурсов, которые до недавнего времени не были широко доступны.

У клиентов часто возникают закономерные вопросы:
  • Что такое комбинаторная оптимизация?
  • Почему комбинаторные задачи невозможно решить с помощью линейного оптимизатора?
  • Чем комбинаторное программирование отличается от линейного/целочисленного?

Для начала определим, что такое комбинаторная задача. Если говорить простым языком, комбинаторная задача — это любая ситуация, когда вам нужно найти наилучшую комбинацию в конечном дискретном пространстве. Предположим, вам нужно решить, кто из родителей отведёт ребёнка в музыкальную школу. Вы выясняете, когда свободен каждый из родителей, сопоставляете это время с расписанием занятий и выбираете самый удобный вариант.

Эта бытовая ситуация – простейший пример комбинаторной задачи. В бизнесе комбинаторные задачи формулируются похожим образом. Но, само собой, они намного сложнее: при их решении нужно учитывать гораздо больше параметров. Для того, чтобы проверить все возможные комбинации и выбрать оптимальную, даже суперкомпьютеру потребуется не одна сотня лет.

На практике нам часто приходится сталкиваться с комбинаторными задачами:
  • Как спланировать доставку товаров? План должен учитывать все возможные маршруты и комбинации — только тогда он будет оптимальным.
  • Как составить план производства? Решить, какой производственный процесс будет оптимальнее всего отвечать потребностям компании, — это непростой и ответственный шаг.

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

Простые комбинаторные задачи можно решить с помощью целочисленного программирования (MIP). Но чем дискретнее задача, тем больше комбинаций должен учитывать движок, и тем менее эффективно он будет работать.

По-настоящему эффективный комбинаторный оптимизатор досконально «знает» задачу, которую он решает. Например, в транспортной оптимизации движок должен понимать, что такое временное окно, и каким образом оптимизационные алгоритмы должны обрабатывать эту информацию. В этом состоит принципиальное отличие комбинаторной оптимизации от линейной / целочисленной, где в качестве универсального языка для описания задач используются линейные уравнения.

Комбинаторная оптимизация позволяет справиться с задачами, которые нельзя решить с помощью классической линейной оптимизации. Это отличная возможность вывести ваш бизнес на новый уровень эффективности.

Свяжитесь с нами, чтобы узнать, какие преимущества комбинаторная оптимизация принесет вашей компании.