Бакалавриат → Линейное программирование и оптимизация ↓
Целочисленное программирование
Целочисленное программирование — это подраздел оптимизации или математического программирования. Это означает поиск наилучшего решения из множества возможных решений. В то время как линейное программирование имеет дело с линейными уравнениями и некоторыми ограничениями, целочисленное программирование является особым типом, в котором переменные решения должны быть целыми числами. Это ограничение делает целочисленное программирование более сложным и трудным, но также более применимым в реальных сценариях, где некоторые ресурсы могут быть только целыми единицами.
Что такое целочисленное программирование?
Целочисленное программирование включает математические задачи, цель которых — оптимизация заданной целевой функции. На первый взгляд это может показаться линейным программированием, но есть важное отличие: в целочисленном программировании вероятность оптимизации функции постоянна, если только некоторые или все переменные ограничены целыми числами.
Целочисленное программирование можно использовать для решения различных задач оптимизации. Некоторые примеры включают планирование и составление расписаний, распределение ресурсов и принятие решений в таких отраслях, как логистика, производство, телекоммуникации и финансы.
Математическая формулировка
Общая форма задачи линейного программирования может быть выражена следующим образом:
Макс или Мин: c1*x1 + c2*x2 + ... + cn*xn при условии: a11*x1 + a12*x2 + ... + a1n*xn (<=, =, или >=) b1 a21*x1 + a22*x2 + ... + a2n*xn (<=, =, или >=) b2 , am1*x1 + am2*x2 + ... + amn*xn (<=, =, или >=) bm x1, x2, ..., xn >= 0
Здесь c
обозначает коэффициенты целевой функции, a
обозначает коэффициенты ограничений, а b
обозначает постоянные правой части. Цель состоит в том, чтобы найти значения x1, x2, ..., xn
, которые максимизируют или минимизируют целевую функцию. Сделать минимум.
В целочисленном программировании одна или несколько переменных x1, x2, ..., xn
ограничены только целыми значениями. Когда все переменные ограничены целыми числами, задача называется задачей чистого целочисленного программирования. Когда только некоторые переменные являются целыми числами, это задача смешанного целочисленного программирования.
Пример
Простая задача целочисленного программирования
Рассмотрим простой пример целочисленного программирования, чтобы понять эти концепции. Допустим, компания хочет решить, сколько оптимальных продуктов A и B произвести. Прибыль от одной единицы продукта A составляет $3, а от продукта B - $5. Компания не может производить более 7 единиц A и 4 единиц продукта B в совокупности.
Модель целочисленного программирования может быть настроена следующим образом:
Макс: 3A+5B при условии: a + b <= 7 b <= 4 A, B >= 0 и целые
Здесь как A, так и B должны быть целыми числами, потому что компания не может сделать дробную часть продукта. Это требование делает целочисленное программирование более сложным, чем простое линейное программирование.
Визуализация целочисленных решений
Для нашего примера давайте визуализируем допустимую область и решение. Рассмотрим ограничений, проведенными на графике с особой отметкой целых чисел:
В примере SVG линия A + B = 7
и линия B = 4
отчетливо обозначены целыми точками. Эти точки включают (2,4), (3,4) и (4,3).
Поскольку наша цель — максимизировать нашу целевую функцию 3A + 5B
для точек решения (3,4) и (4,3), целевые значения составляют:
- Для точки (3,4):
3 * 3 + 5 * 4 = 9 + 20 = 29
- Для точки (4,3):
3 * 4 + 5 * 3 = 12 + 15 = 27
Таким образом, максимальная прибыль достигается в точке (3,4), производя 3 единицы A и 4 единицы B.
Проблемы в целочисленном программировании
Целочисленное программирование имеет присущие ему трудности, которые общие задачи линейного программирования не имеют. Задачи линейного программирования можно решать с использованием методов, таких как симплекс-алгоритм, который эффективно перемещается по допустимым областям.
Однако добавление целочисленных ограничений усложняет поиск решения. Поскольку математические пространства, вовлеченные в целочисленное программирование, не имеют красивых выпуклых форм, для визуализации и вычисления необходимы специальные алгоритмы, такие как:
- Метод ветвей и границ: неоднократное деление задачи на подзадачи ("ветви"), нахождение допустимых областей и решение более простых линейных программ.
- Метод сечений: Это расширение стандартного релаксационного линейного программирования. Он добавляет ограничения для создания допустимой области, показывающей только целочисленные решения.
- Метод ветвей и секущих: Он сочетает в себе указанные выше методы, обеспечивая эффективность и большую практичность в решении задач смешанного целочисленного и целочисленного программирования.
Приложения целочисленного программирования
Из-за своей природы целочисленное программирование находит широкое применение в различных областях. Эти функции решают задачи, а не изучают теоретические стороны.
Ниже приведены некоторые из главных областей применения:
- Производство: контрактование, использование машин, смешивание и распределение.
- Телекоммуникации: распределение пропускной способности, проектирование сетей и маршрутизация.
- Логистика: управление запасами, маршрутизация транспортных средств и составление расписания персонала.
- Финансы: выбор портфеля и бюджетирование капитала.
Каждая область использует факторы, способствующие целочисленному программированию, такие как дискретная природа и оптимизация явного выбора среди конечных возможностей.
Заключение
Целочисленное программирование является ключевым активом в области оптимизации. Его функциональность добавляет практичности, так как ограничения, часто встречающиеся в реальности, естественным образом решаются за счет его дискретных решений. Будучи сложным по своей природе и вычислениям, целочисленное программирование — это очень простой и дорогостоящий процесс. Тем не менее, существующие методы делают его жизнеспособным и широко применимым. Потенциал оптимизации продолжает расти по мере развития отраслей, частично благодаря достижениям и пониманию целочисленного программирования.